New upstream version 10.48~rc1
authorMatthew Vernon <matthew@debian.org>
Tue, 25 Aug 2026 15:18:39 +0000 (16:18 +0100)
committerMatthew Vernon <matthew@debian.org>
Tue, 25 Aug 2026 15:18:39 +0000 (16:18 +0100)
217 files changed:
AUTHORS.md
CMakeLists.txt
ChangeLog
MODULE.bazel
Makefile.am
Makefile.in
NEWS
README
RunGrepTest
RunGrepTest.bat
RunTest
SECURITY.md
SUPPORT-LIFECYCLE.md [new file with mode: 0644]
aclocal.m4
build.zig
build.zig.zon [new file with mode: 0644]
cmake/FindEditline.cmake
cmake/FindReadline.cmake
cmake/PCRE2CheckVscript.cmake
configure
configure.ac
deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c
deps/sljit/sljit_src/sljitConfig.h
deps/sljit/sljit_src/sljitConfigCPU.h
deps/sljit/sljit_src/sljitConfigInternal.h
deps/sljit/sljit_src/sljitLir.c
deps/sljit/sljit_src/sljitLir.h
deps/sljit/sljit_src/sljitNativeARM_32.c
deps/sljit/sljit_src/sljitNativeARM_64.c
deps/sljit/sljit_src/sljitNativeARM_T2_32.c
deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c
deps/sljit/sljit_src/sljitNativeMIPS_common.c
deps/sljit/sljit_src/sljitNativePPC_common.c
deps/sljit/sljit_src/sljitNativeRISCV_64.c
deps/sljit/sljit_src/sljitNativeRISCV_common.c
deps/sljit/sljit_src/sljitNativeS390X.c
deps/sljit/sljit_src/sljitNativeX86_common.c
doc/html/README.txt
doc/html/pcre2api.html
doc/html/pcre2jit.html
doc/html/pcre2partial.html
doc/html/pcre2pattern.html
doc/html/pcre2test.html
doc/pcre2-config.1
doc/pcre2-config.txt
doc/pcre2.3
doc/pcre2.txt
doc/pcre2_callout_enumerate.3
doc/pcre2_code_copy.3
doc/pcre2_code_copy_with_tables.3
doc/pcre2_code_free.3
doc/pcre2_compile.3
doc/pcre2_compile_context_copy.3
doc/pcre2_compile_context_create.3
doc/pcre2_compile_context_free.3
doc/pcre2_config.3
doc/pcre2_convert_context_copy.3
doc/pcre2_convert_context_create.3
doc/pcre2_convert_context_free.3
doc/pcre2_converted_pattern_free.3
doc/pcre2_dfa_match.3
doc/pcre2_general_context_copy.3
doc/pcre2_general_context_create.3
doc/pcre2_general_context_free.3
doc/pcre2_get_error_message.3
doc/pcre2_get_mark.3
doc/pcre2_get_match_data_heapframes_size.3
doc/pcre2_get_match_data_size.3
doc/pcre2_get_ovector_count.3
doc/pcre2_get_ovector_pointer.3
doc/pcre2_get_startchar.3
doc/pcre2_jit_compile.3
doc/pcre2_jit_free_unused_memory.3
doc/pcre2_jit_match.3
doc/pcre2_jit_stack_assign.3
doc/pcre2_jit_stack_create.3
doc/pcre2_jit_stack_free.3
doc/pcre2_maketables.3
doc/pcre2_maketables_free.3
doc/pcre2_match.3
doc/pcre2_match_context_copy.3
doc/pcre2_match_context_create.3
doc/pcre2_match_context_free.3
doc/pcre2_match_data_create.3
doc/pcre2_match_data_create_from_pattern.3
doc/pcre2_match_data_free.3
doc/pcre2_next_match.3
doc/pcre2_pattern_convert.3
doc/pcre2_pattern_info.3
doc/pcre2_serialize_decode.3
doc/pcre2_serialize_encode.3
doc/pcre2_serialize_free.3
doc/pcre2_serialize_get_number_of_codes.3
doc/pcre2_set_bsr.3
doc/pcre2_set_callout.3
doc/pcre2_set_character_tables.3
doc/pcre2_set_compile_extra_options.3
doc/pcre2_set_compile_recursion_guard.3
doc/pcre2_set_depth_limit.3
doc/pcre2_set_glob_escape.3
doc/pcre2_set_glob_separator.3
doc/pcre2_set_heap_limit.3
doc/pcre2_set_match_limit.3
doc/pcre2_set_max_pattern_compiled_length.3
doc/pcre2_set_max_pattern_length.3
doc/pcre2_set_max_varlookbehind.3
doc/pcre2_set_newline.3
doc/pcre2_set_offset_limit.3
doc/pcre2_set_optimize.3
doc/pcre2_set_parens_nest_limit.3
doc/pcre2_set_recursion_limit.3
doc/pcre2_set_recursion_memory_management.3
doc/pcre2_set_substitute_callout.3
doc/pcre2_set_substitute_case_callout.3
doc/pcre2_substitute.3
doc/pcre2_substring_copy_byname.3
doc/pcre2_substring_copy_bynumber.3
doc/pcre2_substring_free.3
doc/pcre2_substring_get_byname.3
doc/pcre2_substring_get_bynumber.3
doc/pcre2_substring_length_byname.3
doc/pcre2_substring_length_bynumber.3
doc/pcre2_substring_list_free.3
doc/pcre2_substring_list_get.3
doc/pcre2_substring_nametable_scan.3
doc/pcre2_substring_number_from_name.3
doc/pcre2api.3
doc/pcre2build.3
doc/pcre2callout.3
doc/pcre2compat.3
doc/pcre2convert.3
doc/pcre2demo.3
doc/pcre2grep.1
doc/pcre2grep.txt
doc/pcre2jit.3
doc/pcre2limits.3
doc/pcre2matching.3
doc/pcre2partial.3
doc/pcre2pattern.3
doc/pcre2perform.3
doc/pcre2posix.3
doc/pcre2sample.3
doc/pcre2serialize.3
doc/pcre2syntax.3
doc/pcre2test.1
doc/pcre2test.txt
doc/pcre2unicode.3
m4/ax_check_vscript.m4 [deleted file]
m4/pcre2_check_vscript.m4 [new file with mode: 0644]
patches/pcre2-10.37-Remove-real-POSIX.patch [new file with mode: 0644]
patches/pcre2-10.39-Fix-incorrect-detection.patch [new file with mode: 0644]
patches/pcre2-10.40-A-Fixed-a-unicode.patch [new file with mode: 0644]
patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch [new file with mode: 0644]
patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch [new file with mode: 0644]
patches/pcre2-10.43-Fix-heapframe-overflow.patch [new file with mode: 0644]
patches/pcre2-10.44-Fix-incorrect-compiling.patch [new file with mode: 0644]
patches/pcre2-10.44-Fix-locking-region.patch [new file with mode: 0644]
patches/pcre2-10.45-Memory-reports-only-compiled.patch [new file with mode: 0644]
patches/pcre2-10.47-Fix-for-callback.patch [new file with mode: 0644]
pcre2-config.in
src/config-cmake.h.in
src/config.h.generic
src/config.h.in
src/libpcre2-16.sym [deleted file]
src/libpcre2-16.sym.in [new file with mode: 0644]
src/libpcre2-32.sym [deleted file]
src/libpcre2-32.sym.in [new file with mode: 0644]
src/libpcre2-8.sym [deleted file]
src/libpcre2-8.sym.in [new file with mode: 0644]
src/libpcre2-posix.sym [deleted file]
src/libpcre2-posix.sym.in [new file with mode: 0644]
src/pcre2.h.generic
src/pcre2.h.in
src/pcre2_compile.c
src/pcre2_compile_class.c
src/pcre2_convert.c
src/pcre2_dfa_match.c
src/pcre2_error.c
src/pcre2_internal.h
src/pcre2_intmodedep.h
src/pcre2_jit_compile.c
src/pcre2_jit_match_inc.h
src/pcre2_jit_misc_inc.h
src/pcre2_jit_test.c
src/pcre2_match.c
src/pcre2_serialize.c
src/pcre2_substitute.c
src/pcre2_substring.c
src/pcre2_ucd.c
src/pcre2_ucp.h
src/pcre2_ucptables_inc.h
src/pcre2grep.c
src/pcre2test.c
src/pcre2test_inc.h
testdata/grepoutput
testdata/grepoutput8
testdata/testinput10
testdata/testinput12
testdata/testinput17
testdata/testinput2
testdata/testinput26
testdata/testinput27
testdata/testinput5
testdata/testoutput10
testdata/testoutput12-16
testdata/testoutput12-32
testdata/testoutput17
testdata/testoutput2
testdata/testoutput26
testdata/testoutput27
testdata/testoutput5
testdata/testoutput8-16-2
testdata/testoutput8-16-4
testdata/testoutput8-32-4
testdata/testoutput8-8-2
testdata/testoutput8-8-3
testdata/testoutput8-8-4

index ced81e68adc54acdb15520b397556fee9e83d0c2..4aa4ed044edf086cef8b9476438d3b5d9580175e 100644 (file)
@@ -77,9 +77,11 @@ All names listed alphabetically.
 
 ### Contributors to PCRE2
 
-This list includes names up until the PCRE2 10.47 release. New names will be
+This list includes names up until the PCRE2 10.48 release. New names will be
 added from the Git history on each release.
 
+    Ilia Alshanetsky
+    Bernard Assan
     Scott Bell
     Carlo Marcelo Arenas Belón
     Edward Betts
@@ -91,6 +93,7 @@ added from the Git history on each release.
     Alejandro Colomar
     Jeremie Courreges-Anglas
     Addison Crump
+    Weixie Cui
     Alex Dowad
     Daniel Engberg
     Marco Feuerstein
@@ -98,7 +101,9 @@ added from the Git history on each release.
     Isaac Oscar Gariano
     David Gaussmann
     Andrey Gorbachev
+    Nikolay Govorov
     Jordan Griege
+    Rudi Heitbaum
     Jason Hood
     Bumsu Hyeon
     Roy Ivy
@@ -106,21 +111,28 @@ added from the Git history on each release.
     Martin Joerg
     Guillem Jover
     Ralf Junker
+    Anton Karpov
     Ayesh Karunaratne
     Michael Kaufmann
+    Srijan Keshri
     Yunho Kim
     Joshua Kinard
     David Korczynski
     Uwe Korn
     Jonas Kvinge
     Kristian Larsson
+    Lin Runze
     Kai Lu
     Behzod Mansurov
+    Brian McKenna
     B. Scott Michel
     Greg Minshall
     Nathan Moinvaziri
+    Alexandre Moyer
     Mike Munday
     Marc Mutz
+    Kartik Naik
+    NaN
     Fabio Pagani
     Christian Persch
     Alex Reinking
@@ -138,6 +150,7 @@ added from the Git history on each release.
     Greg Thain
     Lucas Trzesniewski
     Theodore Tsirpanis
+    Matt Turner
     Aaron M. Ucko
     Matthew Vernon
     Rémi Verschelde
index c97099601722309ef2b4fe5938e90b443fad4a37..701233a188a1cd57f1e7321a26b8090a6555541e 100644 (file)
@@ -146,7 +146,7 @@ endif()
 # setting CMAKE_MODULE_PATH on the command line.
 list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
 
-# external packages
+# External packages
 find_package(BZip2)
 find_package(ZLIB)
 find_package(Readline)
@@ -178,19 +178,25 @@ check_include_file(windows.h HAVE_WINDOWS_H)
 pcre2_use_system_extensions()
 
 cmake_push_check_state(RESET)
-# Somewhat awkward code to propagate the _GNU_SOURCE definition (added to
-# COMPILE_DEFINITIONS by pcre2_use_system_extensions()).
+# Propagate the _GNU_SOURCE definition (added to COMPILE_DEFINITIONS by
+# pcre2_use_system_extensions()) so that these check_symbol_exists() calls
+# can find symbols only exposed with _GNU_SOURCE.
+# We only pass through known plain-text definitions (like _GNU_SOURCE) and
+# skip anything else (e.g. generator expressions inherited from a parent
+# project), because try_compile() cannot handle generator expressions.
 get_directory_property(_pcre2_compile_definitions COMPILE_DEFINITIONS)
 if(DEFINED _pcre2_compile_definitions)
   set(CMAKE_REQUIRED_DEFINITIONS "")
-  foreach(_def IN LISTS _pcre2_compile_definitions)
-    list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D${_def}")
-  endforeach()
+  list(FIND _pcre2_compile_definitions "_GNU_SOURCE" _idx)
+  if(_idx GREATER -1)
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
+  endif()
 endif()
 
 check_symbol_exists(mkostemp stdlib.h HAVE_MKOSTEMP) # glibc 2.7
 check_symbol_exists(memfd_create "sys/mman.h" HAVE_MEMFD_CREATE) # glibc 2.27
 check_symbol_exists(secure_getenv "stdlib.h" HAVE_SECURE_GETENV) # glibc 2.17
+check_symbol_exists(setrlimit "sys/resource.h" HAVE_SETRLIMIT)
 cmake_pop_check_state()
 
 check_c_source_compiles(
@@ -269,7 +275,7 @@ check_c_source_compiles(
 
 # Detect support for linker scripts.
 
-pcre2_check_vscript(HAVE_VSCRIPT VSCRIPT_FLAG)
+pcre2_check_vscript(HAVE_VSCRIPT VSCRIPT_FLAG HAVE_VSCRIPT_NO_STAR)
 
 # Check whether Intel CET is enabled, and if so, adjust compiler flags. This
 # code was written by PH, trying to imitate the logic from the autotools
@@ -446,7 +452,7 @@ if(HAVE_VSCRIPT)
 endif()
 
 # bzip2 lib
-if(BZIP2_FOUND)
+if(BZip2_FOUND)
   option(PCRE2_SUPPORT_LIBBZ2 "Enable support for linking pcre2grep with libbz2." ON)
 endif()
 
@@ -456,12 +462,12 @@ if(ZLIB_FOUND)
 endif()
 
 # editline lib
-if(EDITLINE_FOUND)
+if(Editline_FOUND)
   option(PCRE2_SUPPORT_LIBEDIT "Enable support for linking pcre2test with libedit." OFF)
 endif()
 
 # readline lib
-if(READLINE_FOUND)
+if(Readline_FOUND)
   option(PCRE2_SUPPORT_LIBREADLINE "Enable support for linking pcre2test with libreadline." ON)
 endif()
 
@@ -498,12 +504,12 @@ if(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8)
 endif()
 
 if(PCRE2_SUPPORT_LIBBZ2)
-  if(BZIP2_FOUND)
-    include_directories(${BZIP2_INCLUDE_DIR})
+  if(BZip2_FOUND)
+    include_directories(${BZIP2_INCLUDE_DIRS})
   else()
     message(
       FATAL_ERROR
-      " libbz2 not found. Set BZIP2_INCLUDE_DIR to a compatible header\n"
+      " libbz2 not found. Set BZIP2_INCLUDE_DIRS to a compatible header\n"
       " or set BZip2_ROOT to a full bzip2 installed tree, as needed."
     )
   endif()
@@ -511,42 +517,42 @@ endif()
 
 if(PCRE2_SUPPORT_LIBZ)
   if(ZLIB_FOUND)
-    include_directories(${ZLIB_INCLUDE_DIR})
+    include_directories(${ZLIB_INCLUDE_DIRS})
   else()
     message(
       FATAL_ERROR
-      " zlib not found. Set ZLIB_INCLUDE_DIR to a compatible header\n"
+      " zlib not found. Set ZLIB_INCLUDE_DIRS to a compatible header\n"
       " or set ZLIB_ROOT to a full zlib installed tree, as needed."
     )
   endif()
 endif()
 
 if(PCRE2_SUPPORT_LIBEDIT)
-  if(EDITLINE_FOUND)
-    include_directories(${EDITLINE_INCLUDE_DIR})
+  if(Editline_FOUND)
+    include_directories(${EDITLINE_INCLUDE_DIRS})
   else()
     message(
       FATAL_ERROR
-      " libedit not found. Set EDITLINE_INCLUDE_DIR to a compatible header\n"
+      " libedit not found. Set EDITLINE_INCLUDE_DIRS to a compatible header\n"
       " or set Editline_ROOT to a full libedit installed tree, as needed."
     )
   endif()
 endif()
 
 if(PCRE2_SUPPORT_LIBREADLINE)
-  if(READLINE_FOUND)
-    include_directories(${READLINE_INCLUDE_DIR})
+  if(Readline_FOUND)
+    include_directories(${READLINE_INCLUDE_DIRS})
   else()
     message(
       FATAL_ERROR
-      " libreadline not found. Set READLINE_INCLUDE_DIR to a compatible header\n"
+      " libreadline not found. Set READLINE_INCLUDE_DIRS to a compatible header\n"
       " or set Readline_ROOT to a full libreadline installed tree, as needed."
     )
   endif()
 endif()
 
 if(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT)
-  if(READLINE_FOUND)
+  if(Readline_FOUND)
     message(
       FATAL_ERROR
       " Only one of the readline compatible libraries can be enabled.\n"
@@ -603,24 +609,16 @@ endif()
 set(PCRE2TEST_LIBS)
 set(PCRE2GREP_LIBS)
 
-# This next one used to reference ${READLINE_LIBRARY})
-# but I was advised to add the NCURSES test as well, along with
-# some modifications to cmake/FindReadline.cmake which should
-# make it possible to override the default if necessary. PH
-
 if(PCRE2_SUPPORT_LIBREADLINE)
   set(SUPPORT_LIBREADLINE 1)
-  list(APPEND PCRE2TEST_LIBS ${READLINE_LIBRARY})
-  if(DEFINED NCURSES_LIBRARY)
-    list(APPEND PCRE2TEST_LIBS ${NCURSES_LIBRARY})
-  endif()
+  list(APPEND PCRE2TEST_LIBS ${READLINE_LIBRARIES})
 endif()
 
 # libedit is a plug-compatible alternative to libreadline
 
 if(PCRE2_SUPPORT_LIBEDIT)
   set(SUPPORT_LIBEDIT 1)
-  list(APPEND PCRE2TEST_LIBS ${EDITLINE_LIBRARY})
+  list(APPEND PCRE2TEST_LIBS ${EDITLINE_LIBRARIES})
 endif()
 
 if(PCRE2_SUPPORT_LIBZ)
@@ -705,10 +703,6 @@ endif()
 file(REMOVE ${PROJECT_SOURCE_DIR}/src/config.h)
 file(REMOVE ${PROJECT_SOURCE_DIR}/src/pcre2.h)
 
-# Output files
-
-configure_file(src/config-cmake.h.in ${PROJECT_BINARY_DIR}/src/config.h @ONLY)
-
 # Parse version numbers and date out of configure.ac
 
 file(
@@ -765,13 +759,26 @@ parse_lib_version(LIBPCRE2_8)
 parse_lib_version(LIBPCRE2_16)
 parse_lib_version(LIBPCRE2_32)
 
+# Output files
+
+configure_file(src/config-cmake.h.in ${PROJECT_BINARY_DIR}/src/config.h @ONLY)
+
 configure_file(src/pcre2.h.in ${PROJECT_BINARY_DIR}/interface/pcre2.h @ONLY)
 configure_file(src/pcre2posix.h ${PROJECT_BINARY_DIR}/interface/pcre2posix.h COPYONLY)
 
-# Make sure to not link debug libs
-# against release libs and vice versa
-if(WIN32)
-  set(CMAKE_DEBUG_POSTFIX "d")
+# Configure the version script files.
+
+if(HAVE_VSCRIPT AND PCRE2_SYMVERS)
+  if(HAVE_VSCRIPT_NO_STAR)
+    set(PCRE2_EXTRA_LOCAL_SYMS "")
+  else()
+    set(PCRE2_EXTRA_LOCAL_SYMS "  local: *;")
+  endif()
+
+  configure_file(src/libpcre2-8.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-8.sym @ONLY)
+  configure_file(src/libpcre2-16.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-16.sym @ONLY)
+  configure_file(src/libpcre2-32.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-32.sym @ONLY)
+  configure_file(src/libpcre2-posix.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym @ONLY)
 endif()
 
 # Character table generation
@@ -896,9 +903,13 @@ if(MSVC)
   add_compile_definitions(_CRT_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS)
 endif()
 
+# Make sure to not link debug libs against release libs and vice versa.
+if(WIN32)
+  set(CMAKE_DEBUG_POSTFIX "d")
+endif()
+
 set(TARGETS)
 set(DLL_PDB_FILES)
-set(DLL_PDB_DEBUG_FILES)
 
 # 8-bit library
 
@@ -972,12 +983,11 @@ if(PCRE2_BUILD_PCRE2_8)
       target_link_libraries(pcre2-8-shared Threads::Threads)
     endif()
     if(HAVE_VSCRIPT AND PCRE2_SYMVERS)
-      target_link_options(pcre2-8-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-8.sym)
-      set_target_properties(pcre2-8-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-8.sym)
+      target_link_options(pcre2-8-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-8.sym)
+      set_target_properties(pcre2-8-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-8.sym)
     endif()
     list(APPEND TARGETS pcre2-8-shared)
-    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-8-shared>/pcre2-8.pdb)
-    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-8-shared>/pcre2-8d.pdb)
+    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE:pcre2-8-shared>)
 
     add_library(pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
     target_include_directories(
@@ -995,14 +1005,13 @@ if(PCRE2_BUILD_PCRE2_8)
         OUTPUT_NAME pcre2-posix
     )
     if(HAVE_VSCRIPT AND PCRE2_SYMVERS)
-      target_link_options(pcre2-posix-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-posix.sym)
-      set_target_properties(pcre2-posix-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-posix.sym)
+      target_link_options(pcre2-posix-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym)
+      set_target_properties(pcre2-posix-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym)
     endif()
     target_compile_definitions(pcre2-posix-shared PUBLIC PCRE2POSIX_SHARED)
     target_link_libraries(pcre2-posix-shared pcre2-8-shared)
     list(APPEND TARGETS pcre2-posix-shared)
-    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-posix-shared>/pcre2-posix.pdb)
-    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-posix-shared>/pcre2-posixd.pdb)
+    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE:pcre2-posix-shared>)
 
     if(MINGW)
       if(NON_STANDARD_LIB_PREFIX)
@@ -1077,12 +1086,11 @@ if(PCRE2_BUILD_PCRE2_16)
       target_link_libraries(pcre2-16-shared Threads::Threads)
     endif()
     if(HAVE_VSCRIPT AND PCRE2_SYMVERS)
-      target_link_options(pcre2-16-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-16.sym)
-      set_target_properties(pcre2-16-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-16.sym)
+      target_link_options(pcre2-16-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-16.sym)
+      set_target_properties(pcre2-16-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-16.sym)
     endif()
     list(APPEND TARGETS pcre2-16-shared)
-    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-16-shared>/pcre2-16.pdb)
-    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-16-shared>/pcre2-16d.pdb)
+    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-16-shared>)
 
     if(MINGW)
       if(NON_STANDARD_LIB_PREFIX)
@@ -1155,12 +1163,11 @@ if(PCRE2_BUILD_PCRE2_32)
       target_link_libraries(pcre2-32-shared Threads::Threads)
     endif()
     if(HAVE_VSCRIPT AND PCRE2_SYMVERS)
-      target_link_options(pcre2-32-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-32.sym)
-      set_target_properties(pcre2-32-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-32.sym)
+      target_link_options(pcre2-32-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-32.sym)
+      set_target_properties(pcre2-32-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-32.sym)
     endif()
     list(APPEND TARGETS pcre2-32-shared)
-    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-32-shared>/pcre2-32.pdb)
-    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-32-shared>/pcre2-32d.pdb)
+    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-32-shared>)
 
     if(MINGW)
       if(NON_STANDARD_LIB_PREFIX)
@@ -1478,6 +1485,7 @@ file(
   NEWS
   README
   SECURITY.md
+  SUPPORT-LIFECYCLE.md
 )
 file(GLOB man1 ${PROJECT_SOURCE_DIR}/doc/*.1)
 file(GLOB man3 ${PROJECT_SOURCE_DIR}/doc/*.3)
@@ -1488,8 +1496,11 @@ install(FILES ${txts} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/pcre2)
 install(FILES ${html} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/pcre2/html)
 
 if(MSVC AND INSTALL_MSVC_PDB)
-  install(FILES ${DLL_PDB_FILES} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS RelWithDebInfo)
-  install(FILES ${DLL_PDB_DEBUG_FILES} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug)
+  install(
+    FILES ${DLL_PDB_FILES}
+    DESTINATION ${CMAKE_INSTALL_BINDIR}
+    CONFIGURATIONS Debug RelWithDebInfo
+  )
 endif()
 
 # Help, only for nice output
@@ -1589,17 +1600,17 @@ if(PCRE2_SHOW_REPORT)
   else()
     message(STATUS "  Link pcre2grep with libz .......... : Library not found")
   endif()
-  if(BZIP2_FOUND)
+  if(BZip2_FOUND)
     message(STATUS "  Link pcre2grep with libbz2 ........ : ${PCRE2_SUPPORT_LIBBZ2}")
   else()
     message(STATUS "  Link pcre2grep with libbz2 ........ : Library not found")
   endif()
-  if(EDITLINE_FOUND)
+  if(Editline_FOUND)
     message(STATUS "  Link pcre2test with libeditline ... : ${PCRE2_SUPPORT_LIBEDIT}")
   else()
     message(STATUS "  Link pcre2test with libeditline ... : Library not found")
   endif()
-  if(READLINE_FOUND)
+  if(Readline_FOUND)
     message(STATUS "  Link pcre2test with libreadline ... : ${PCRE2_SUPPORT_LIBREADLINE}")
   else()
     message(STATUS "  Link pcre2test with libreadline ... : Library not found")
index 95cfa9e9f27c6e74c33e15cb50a7009e1c872a39..8c67c7a07bd0554d8a8219875c015446ae21a98c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,138 @@ there is also the log of commit messages.
 Internal changes which are not visible to clients of the library are mostly not
 listed here.
 
+
+Version 10.48 27-August-2026
+----------------------------
+
+1. (#826) [GHSA-q7rw-r7qq-2hx6] Initialized alignment padding in serialized
+character lists so that pcre2_serialize_encode() does not expose two
+uninitialised bytes from malloc().
+
+2. (#825) Fixed the casing of CMake package variables and corrected
+Readline/ncurses linkage.
+
+3. (#830) Updated Unicode support to Unicode 17.0, including new scripts,
+characters, properties, case mappings, and emoji data.
+
+4. (a9d4a748) Renamed the default development branch from master to main.
+
+5. (574f5683) Allowed PCRE2_NO_UTF_CHECK to differ between an existing match
+and pcre2_substitute() with PCRE2_SUBSTITUTE_MATCHED, instead of returning
+PCRE2_ERROR_DIFFSUBSOPTIONS.
+
+6. (#841) Fixed incorrect compilation and matching of character classes that
+combine characters from multiple internal ranges, including characters at or
+below U+00FF together with characters at U+0100 and U+8000 or above.
+
+7. (#849) Reduced the memory used by each pcre2_match() heap frame by shrinking
+temporary fields.
+
+8. (#852) Added interpreter and JIT support for possessive repeats of
+backreferences.
+
+9. (#857) Fixed a regression in pcre2_substitute() that mishandled repeated
+backslash escapes in extended replacement strings.
+
+10. (#858) Added improvements to pcre2_substitute(). Support for partial matches
+with PCRE2_SUBSTITUTE_REPLACEMENT_ONLY added, and added
+PCRE2_ERROR_PARTIALSUBS for replacements containing $' or $_ which cannot be
+expanded for partial matches.
+
+11. (#859, 30c9faa4) Expanded pcre2-config's recognition of system library
+directories on Linux (multilib and multiarch), and AIX and Solaris, avoiding
+unnecessary -L options.
+
+12. (#875) Fixed a stale repeat value while constructing JIT scan prefixes,
+which could cause missed matches when a prefix was followed by a bounded
+character-class repeat with a zero minimum.
+
+13. (#879) Fixed build warnings in pcre2grep with C23 and glibc 2.43, by retaining
+const qualifiers from strstr() and strchr().
+
+14. (#883) Prevented generator expressions inherited from a parent CMake
+project from entering CMAKE_REQUIRED_DEFINITIONS during configuration checks.
+
+15. (#884, #880) Made symbol-version scripts platform-specific, fixing Solaris SPARC
+symbol versioning.
+
+16. (#888) Fixed memory leaks and stale-pointer double frees when
+pcre2_deserialize_decode() rejects an invalid block size.
+
+17. (#894) Updated Zig's build.zig, including exported headers, hidden symbol
+visibility, and sanitizer support.
+
+18. (#893) Changed pcre2test builds to detect setrlimit() instead of relying on
+a hard-coded platform list.
+
+19. (#907) Added support for installing PCRE2 directly with `zig fetch`,
+including a Zig package manifest and release integration.
+
+20. (#912) Fixed a JIT-specific bug in variable-length lookbehinds which caused
+incorrect match results during backtracking.
+
+21. (#863) Added a five-year support lifecycle policy and publication of backport
+patches for security and high-severity fixes in older releases.
+
+22. (#937) Fixed a leak and later invalid free when calling the fast-path
+pcre2_jit_match() function with a match data object previously used with
+pcre2_match() and PCRE2_COPY_MATCHED_SUBJECT. No security advisory, as this is
+considered unlikely to affect applications.
+
+23. (#936) Made pcre2grep recognize -- during positional argument processing,
+for improved compatibility with GNU grep.
+
+24. (#922) Added support for Zig JIT builds to fetch SLJIT through the Zig
+package manager when the Git submodule is absent. The minimum Zig version
+is raised to 0.16.0.
+
+25. (#926) [GHSA-2p8c-ff85-vh9x] If pcre2_jit_compile() is called with options
+for some match modes, and then pcre2_match() is used to perform a match for a
+different match mode, an out-of-bounds read can occur if the match is attempted
+against invalid UTF input. The interpreter fallback now performs its own UTF
+validation correctly when some JIT match modes have been compiled, but not the
+requested mode.
+
+26. (#909) [GHSA-q8g2-wprr-34m9] If pcre2_convert() is called on untrusted input
+on platforms with 32-bit size_t, an out-of-bounds heap write can occur.
+Additionally, the allocation made was larger than required in common cases.
+Added overflow checks for allocations in pattern conversion and substring APIs.
+
+27. (#945) Fixed JIT character advancement with PCRE2_MATCH_INVALID_UTF in
+UTF-8 and UTF-16 modes. Valid multi-code-unit characters are now advanced as a
+unit, while invalid characters advance by one code unit, preventing adjacent
+characters from being skipped.
+
+28. (#948) Fixed one-past-the-end compile error offsets for incomplete \x{,
+\o{, and \N{U+ escapes at the end of a pattern.
+
+29. (#947) Clarified documentation for PCRE2_DFA_RESTART, which does not remove
+the requirement to retain previously supplied subject data, including sufficient
+history for nested lookbehinds.
+
+30. (#942, #954) Fixed pcre2grep handling for \K matches whose end offset precedes
+their start offset. Such ranges could previously cause an unsigned match-length
+underflow.
+
+31. (#956) Fixed an integer overflow in pcre2grep when advancing multiline
+output state, and preserved pending output when crossing lines.
+
+32. (#957) Updated bundled SLJIT with architecture-specific code-generation and
+portability fixes.
+
+33. (#958) Fixed CMake installation of MSVC PDB files when
+CMAKE_SHARED_LIBRARY_PREFIX_C is customized.
+
+34. (#961, #962) Fixed two compilation issues preventing use of extended
+(Boolean) character classes before a lookbehind, or inside a lookaround.
+
+35. [GHSA-fmgr-6ggq-9859] Withheld
+
+36. [GHSA-9qww-pwc4-77qq] Withheld
+
+37. [GHSA-3r4p-g7gg-ppmf] Withheld
+
+
 Version 10.47 21-October-2025
 -----------------------------
 
index abed25aa83647f7b4be1af66f1b429b0a7f9726e..70242598cdd3999d79ef83d71d9e62fe30179e8a 100644 (file)
@@ -1,6 +1,6 @@
 module(
     name = "pcre2",
-    version = "10.47",
+    version = "10.48-RC1",
     compatibility_level = 1,
 )
 
index da5e3d912145062c7fce0be812cdb8e3fd7ab215..f6f584aa5829a2fb44892817e1e48e511e2d8e66 100644 (file)
@@ -23,6 +23,7 @@ dist_doc_DATA = \
   NEWS \
   README \
   SECURITY.md \
+  SUPPORT-LIFECYCLE.md \
   doc/pcre2.txt \
   doc/pcre2-config.txt \
   doc/pcre2grep.txt \
@@ -278,8 +279,8 @@ EXTRA_DIST =
 # These files contain additional m4 macros that are used by autoconf.
 
 EXTRA_DIST += \
-  m4/ax_check_vscript.m4 \
   m4/ax_pthread.m4 \
+  m4/pcre2_check_vscript.m4 \
   m4/pcre2_visibility.m4 \
   m4/pcre2_zos.m4
 
@@ -289,12 +290,27 @@ EXTRA_DIST += \
   NON-AUTOTOOLS-BUILD \
   HACKING
 
+# These are patches containing backports for older versions of PCRE2
+
+EXTRA_DIST += \
+  patches/pcre2-10.37-Remove-real-POSIX.patch \
+  patches/pcre2-10.39-Fix-incorrect-detection.patch \
+  patches/pcre2-10.40-A-Fixed-a-unicode.patch \
+  patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch \
+  patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch \
+  patches/pcre2-10.43-Fix-heapframe-overflow.patch \
+  patches/pcre2-10.44-Fix-incorrect-compiling.patch \
+  patches/pcre2-10.44-Fix-locking-region.patch \
+  patches/pcre2-10.45-Memory-reports-only-compiled.patch \
+  patches/pcre2-10.47-Fix-for-callback.patch
+
 # These are support files for building with Bazel or Zig
 
 EXTRA_DIST += \
   BUILD.bazel \
   MODULE.bazel \
-  build.zig
+  build.zig \
+  build.zig.zon
 
 # These are support files for building under VMS
 
@@ -897,11 +913,11 @@ pkgconfig_DATA += libpcre2-32.pc
 endif
 
 
-# Symbol version files for use with GNU and Sun ld.
+# Symbol version template files for use with GNU and Sun ld.
 
 EXTRA_DIST += \
-  src/libpcre2-8.sym src/libpcre2-16.sym src/libpcre2-32.sym \
-  src/libpcre2-posix.sym
+  src/libpcre2-8.sym.in src/libpcre2-16.sym.in src/libpcre2-32.sym.in \
+  src/libpcre2-posix.sym.in
 
 
 # gcov/lcov code coverage reporting
index 35f2abe643e26c70756ae97ede16a7a27d6099b7..2a26fc92cb69b00bc189e8926b446b498d0fa936 100644 (file)
@@ -157,10 +157,11 @@ noinst_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \
 @WITH_GCOV_FALSE@am__append_55 = coverage-distclean
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_vscript.m4 \
-       $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
-       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pcre2_check_vscript.m4 \
        $(top_srcdir)/m4/pcre2_visibility.m4 \
        $(top_srcdir)/m4/pcre2_zos.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -174,7 +175,8 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES = libpcre2-8.pc libpcre2-16.pc libpcre2-32.pc \
-       libpcre2-posix.pc pcre2-config src/pcre2.h
+       libpcre2-posix.pc pcre2-config src/pcre2.h src/libpcre2-8.sym \
+       src/libpcre2-16.sym src/libpcre2-32.sym src/libpcre2-posix.sym
 CONFIG_CLEAN_VPATH_FILES =
 @WITH_PCRE2_8_TRUE@am__EXEEXT_1 = pcre2grep$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \
@@ -895,6 +897,10 @@ am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
        $(srcdir)/libpcre2-16.pc.in $(srcdir)/libpcre2-32.pc.in \
        $(srcdir)/libpcre2-8.pc.in $(srcdir)/libpcre2-posix.pc.in \
        $(srcdir)/pcre2-config.in $(top_srcdir)/src/config.h.in \
+       $(top_srcdir)/src/libpcre2-16.sym.in \
+       $(top_srcdir)/src/libpcre2-32.sym.in \
+       $(top_srcdir)/src/libpcre2-8.sym.in \
+       $(top_srcdir)/src/libpcre2-posix.sym.in \
        $(top_srcdir)/src/pcre2.h.in AUTHORS.md COPYING ChangeLog \
        INSTALL NEWS README ar-lib compile config.guess config.sub \
        depcomp install-sh ltmain.sh missing test-driver
@@ -998,6 +1004,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PCRE2POSIX_CFLAG = @PCRE2POSIX_CFLAG@
 PCRE2_DATE = @PCRE2_DATE@
+PCRE2_EXTRA_LOCAL_SYMS = @PCRE2_EXTRA_LOCAL_SYMS@
 PCRE2_MAJOR = @PCRE2_MAJOR@
 PCRE2_MINOR = @PCRE2_MINOR@
 PCRE2_PRERELEASE = @PCRE2_PRERELEASE@
@@ -1019,7 +1026,6 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
 VERSION = @VERSION@
 VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
-VSCRIPT_LDFLAGS = @VSCRIPT_LDFLAGS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -1091,6 +1097,7 @@ dist_doc_DATA = \
   NEWS \
   README \
   SECURITY.md \
+  SUPPORT-LIFECYCLE.md \
   doc/pcre2.txt \
   doc/pcre2-config.txt \
   doc/pcre2grep.txt \
@@ -1335,6 +1342,8 @@ MAINTAINERCLEANFILES = src/pcre2.h.generic src/config.h.generic
 
 # These files contain maintenance information
 
+# These are patches containing backports for older versions of PCRE2
+
 # These are support files for building with Bazel or Zig
 
 # These are support files for building under VMS
@@ -1352,10 +1361,20 @@ MAINTAINERCLEANFILES = src/pcre2.h.generic src/config.h.generic
 # PCRE2 demonstration program. Not built automatically. The point is that the
 # users should build it themselves. So just distribute the source.
 
-# Symbol version files for use with GNU and Sun ld.
-EXTRA_DIST = m4/ax_check_vscript.m4 m4/ax_pthread.m4 \
+# Symbol version template files for use with GNU and Sun ld.
+EXTRA_DIST = m4/ax_pthread.m4 m4/pcre2_check_vscript.m4 \
        m4/pcre2_visibility.m4 m4/pcre2_zos.m4 NON-AUTOTOOLS-BUILD \
-       HACKING BUILD.bazel MODULE.bazel build.zig vms/configure.com \
+       HACKING patches/pcre2-10.37-Remove-real-POSIX.patch \
+       patches/pcre2-10.39-Fix-incorrect-detection.patch \
+       patches/pcre2-10.40-A-Fixed-a-unicode.patch \
+       patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch \
+       patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch \
+       patches/pcre2-10.43-Fix-heapframe-overflow.patch \
+       patches/pcre2-10.44-Fix-incorrect-compiling.patch \
+       patches/pcre2-10.44-Fix-locking-region.patch \
+       patches/pcre2-10.45-Memory-reports-only-compiled.patch \
+       patches/pcre2-10.47-Fix-for-callback.patch BUILD.bazel \
+       MODULE.bazel build.zig build.zig.zon vms/configure.com \
        vms/openvms_readme.txt vms/pcre2.h_patch vms/stdint.h \
        src/pcre2.h.generic src/config.h.generic \
        src/pcre2_chartables.c.dist \
@@ -1440,8 +1459,8 @@ EXTRA_DIST = m4/ax_check_vscript.m4 m4/ax_pthread.m4 \
        testdata/testoutputheap-16 testdata/testoutputheap-32 \
        testdata/testoutputheap-8 testdata/valgrind-jit.supp \
        testdata/wintestinput3 testdata/wintestoutput3 perltest.sh \
-       src/pcre2demo.c src/libpcre2-8.sym src/libpcre2-16.sym \
-       src/libpcre2-32.sym src/libpcre2-posix.sym \
+       src/pcre2demo.c src/libpcre2-8.sym.in src/libpcre2-16.sym.in \
+       src/libpcre2-32.sym.in src/libpcre2-posix.sym.in \
        cmake/COPYING-CMAKE-SCRIPTS cmake/FindEditline.cmake \
        cmake/FindReadline.cmake cmake/pcre2-config.cmake.in \
        cmake/PCRE2CheckVscript.cmake \
@@ -1693,6 +1712,14 @@ pcre2-config: $(top_builddir)/config.status $(srcdir)/pcre2-config.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 src/pcre2.h: $(top_builddir)/config.status $(top_srcdir)/src/pcre2.h.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
+src/libpcre2-8.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-8.sym.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+src/libpcre2-16.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-16.sym.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+src/libpcre2-32.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-32.sym.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+src/libpcre2-posix.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-posix.sym.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
diff --git a/NEWS b/NEWS
index cbe60b6e819eda7cad2135e539d893b3ae34b823..94d81b3987d6731ac135ef61c3181e6ebc9ec52c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,62 @@
 News about PCRE2 releases
 -------------------------
 
+Version 10.48 27-August-2026
+----------------------------
+
+This is a regular release, incorporating security fixes along with small
+improvements and fixes to library behaviour.
+
+Only changes to behaviour, changes to the API, and other significant changes
+are described here. Please see the ChangeLog and Git log for further details.
+
+* (Git change) Renamed the default development branch from master to main.
+
+* (Maintenance change) Added a five-year support lifecycle policy and
+publication of backport patches for security and high-severity fixes in older
+releases.
+
+* (Security fix for very specific API usage, GHSA-2p8c-ff85-vh9x) If
+pcre2_jit_compile() is called with options for some match modes, and then
+pcre2_match() is used to perform a match for a different match mode, an
+out-of-bounds read can occur if the match is attempted against invalid UTF input.
+
+* (Security fix for pattern conversion, GHSA-q8g2-wprr-34m9) If pcre2_convert()
+is called on untrusted input on platforms with 32-bit size_t, an out-of-bounds
+heap write can occur.
+
+* (Security fix, GHSA-fmgr-6ggq-9859) Withheld
+
+* (Security fix, GHSA-9qww-pwc4-77qq) Withheld
+
+* (Security fix, GHSA-3r4p-g7gg-ppmf) Withheld
+
+* (Matching correctness) Fixed several matching issues:
+  - A JIT-specific matching bug affecting prefix scanning on patterns with
+    repeats (#875).
+  - A JIT-specific matching bug in variable-length lookbehinds (#912).
+  - Miscompiled Unicode character classes combining characters at or below
+    U+00FF with characters at U+0100 and U+8000 or above (#841).
+  - Incorrect JIT character advancement with PCRE2_MATCH_INVALID_UTF in UTF-8
+    and UTF-16 modes, which could skip adjacent characters (#945).
+
+* (Behaviour change) Updated Unicode support to Unicode 17.0.
+
+* (Small behaviour changes) Many small fixes, including pcre2_substitute()
+improvements, optimisation of possessive backreference matching, and
+pcre2_compile() fixes.
+
+* (Small build changes) Many small adjustments to the CMake and Zig builds.
+
+* (Security fix for very specific API usage, #937) Fixed a leak and later
+invalid free when calling the fast-path pcre2_jit_match() function with a match
+data object previously used with pcre2_match() and
+PCRE2_COPY_MATCHED_SUBJECT.
+
+* (Low-severity security fix, GHSA-q7rw-r7qq-2hx6) Fixed exposure of two
+uninitialised bytes from malloc() via pcre2_serialize_encode().
+
+
 Version 10.47 21-October-2025
 -----------------------------
 
diff --git a/README b/README
index 593bab279281698699d9cccacf5c85fd03f22ac6..3adf495a93d153d224d468db2d74bfba172b0f1f 100644 (file)
--- a/README
+++ b/README
@@ -519,13 +519,14 @@ system. The following are installed (file names are all relative to the
     *.html (lots more pages, hyperlinked from index.html)
 
   Text file documentation (share/doc/pcre2):
-    AUTHORS
+    AUTHORS.md
     COPYING
     ChangeLog
-    LICENCE
+    LICENCE.md
     NEWS
     README
-    SECURITY
+    SECURITY.md
+    SUPPORT-LIFECYCLE.md
     pcre2.txt         (a concatenation of the man(3) pages)
     pcre2test.txt     the pcre2test man page
     pcre2grep.txt     the pcre2grep man page
@@ -920,6 +921,7 @@ The distribution should contain the files listed below.
   LICENCE.md               conditions for the use of PCRE2
   COPYING                  the same, using GNU's standard name
   SECURITY.md              information on reporting vulnerabilities
+  SUPPORT-LIFECYCLE.md     information on the support policy
   Makefile.in              ) template for Unix Makefile, which is built by
                            )   "configure"
   Makefile.am              ) the automake input that was used to create
@@ -962,10 +964,10 @@ The distribution should contain the files listed below.
   testdata/testoutput*     expected test results
   testdata/grep*           input and output for pcre2grep tests
   testdata/*               other supporting test files
-  src/libpcre2-8.sym       )
-  src/libpcre2-16.sym      ) symbol version scripts for the GNU and Sun linkers
-  src/libpcre2-32.sym      )
-  src/libpcre2-posix.sym   )
+  src/libpcre2-8.sym.in     )
+  src/libpcre2-16.sym.in    ) symbol version script templates for the
+  src/libpcre2-32.sym.in    ) GNU, BSD and Sun linkers
+  src/libpcre2-posix.sym.in )
 
 (D) Auxiliary files for CMake support
 
@@ -991,6 +993,7 @@ The distribution should contain the files listed below.
   BUILD.bazel             ) files used by the Bazel
   MODULE.bazel            )   build system
   build.zig               file used by zig's build system
+  build.zig.zon           file used by zig's package manager
 
 (G) Auxiliary files for building PCRE2 under OpenVMS
 
@@ -999,7 +1002,7 @@ The distribution should contain the files listed below.
   vms/pcre2.h_patch       )
   vms/stdint.h            )
 
-=============================
-Last updated: 15 October 2025
-=============================
+============================
+Last updated: 08 August 2026
+============================
 
index 76af36950a32a2227d39616bdfee29849e1d29d7..eaed73f7f9d92ea5f4416ff1780d280daa708f67 100755 (executable)
@@ -811,6 +811,17 @@ echo "RC=$?" >>testtrygrep
 echo "---------------------------- Test 147 -----------------------------" >>testtrygrep
 $valgrind $vjs $pcre2grep -e '123|fox' -- -nonfile >>testtrygrep 2>&1
 echo "RC=$?" >>testtrygrep
+printf 'A123B' >testtemp1grep
+printf 'C123D' > ./-testtemp1grep
+$valgrind $vjs $pcre2grep '123' -- -testtemp1grep >>testtrygrep 2>&1
+echo "RC=$?" >>testtrygrep
+$valgrind $vjs $pcre2grep '123' testtemp1grep -- -testtemp1grep >>testtrygrep 2>&1
+echo "RC=$?" >>testtrygrep
+$valgrind $vjs $pcre2grep '123' -- <testtemp1grep >>testtrygrep 2>&1
+echo "RC=$?" >>testtrygrep
+printf 'E123F' > ./--
+$valgrind $vjs $pcre2grep -- '123' -- >>testtrygrep 2>&1
+echo "RC=$?" >>testtrygrep
 
 echo "---------------------------- Test 148 -----------------------------" >>testtrygrep
 $valgrind $vjs $pcre2grep --nonexist >>testtrygrep 2>&1
@@ -916,6 +927,17 @@ echo "RC=$?" >>testtrygrep
 (cd $srcdir; $valgrind $vjs $pcre2grep -n -B4 -A2 '^(ert|dfg)' ./testdata/grepinput) >>testtrygrep
 echo "RC=$?" >>testtrygrep
 
+echo "---------------------------- Test 161 -----------------------------" >>testtrygrep
+printf 'XfooY\n' >testNinputgrep
+$valgrind $vjs $pcre2grep --allow-lookaround-bsk -o '(?=foo\K)' testNinputgrep >>testtrygrep
+echo "RC=$?" >>testtrygrep
+$valgrind $vjs $pcre2grep --allow-lookaround-bsk --output '$0' '(?=foo\K)' testNinputgrep >>testtrygrep
+echo "RC=$?" >>testtrygrep
+$valgrind $vjs $pcre2grep --allow-lookaround-bsk --line-offsets '(?=foo\K)' testNinputgrep >>testtrygrep
+echo "RC=$?" >>testtrygrep
+$valgrind $vjs $pcre2grep --allow-lookaround-bsk --file-offsets '(?=foo\K)' testNinputgrep >>testtrygrep
+echo "RC=$?" >>testtrygrep
+
 
 # Now compare the results.
 
@@ -968,6 +990,184 @@ if [ $utf8 -ne 0 ] ; then
   (cd $srcdir; $valgrind $vjs $pcre2grep -u --posix-digit --colour=always 'A\d' ./testdata/grepinput8) >>testtrygrep
   echo "RC=$?" >>testtrygrep
 
+  echo "---------------------------- Test U11 ------------------------------" >>testtrygrep
+  printf '................................................' | tr '.' '\200' >testtemp1grep
+  printf 'x\n' >>testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit --buffer-size=16 -U --allow-lookaround-bsk -o '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "only-matching RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep --no-jit --buffer-size=16 -U --allow-lookaround-bsk -M '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep --no-jit --buffer-size=16 -U --allow-lookaround-bsk --colour=always '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "colour RC=$?" >>testtrygrep
+
+  echo "---------------------------- Test U12 ------------------------------" >>testtrygrep
+  # Colouring only, so the subject is a single line. An empty match at the end
+  # of the subject, then one that matches before retrying at the end.
+  printf 'abc\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -u '$' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-empty-at-end RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n --colour=always -u '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-nonempty-then-empty RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n --colour=always -u '^' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-empty-at-start RC=$?" >>testtrygrep
+
+  # An empty line, so the first match is empty with nothing following it, and a
+  # final line with no newline, so a restart can reach the end of the line.
+  printf '\nabc\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -u '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-empty-line RC=$?" >>testtrygrep
+  printf 'abc' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -u '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-no-final-newline RC=$?" >>testtrygrep
+
+  # Multiline, where a restart may have to move on to a following line.
+  printf 'a\nb\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -M -u '$' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-empty-at-line-end RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -u '^' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-empty-at-line-start RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -u '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-nonempty-then-empty RC=$?" >>testtrygrep
+
+  # A match that spans several lines, so that the restart has to skip over more
+  # than one line before looking for the next match.
+  printf 'a\nb\nc\nd\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -M -u '(?s)a.*c' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-spanning RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -u '(?s)a.*c|$' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-spanning-then-empty RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M --colour=always -u '(?s)a.*c|$' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-colour-spanning RC=$?" >>testtrygrep
+
+  # Invalid UTF-8 after an empty match, which is when the scan over
+  # continuation bytes that follow the restart point can run. Here the scan
+  # stops at the start of the next character.
+  printf 'x\200\200y\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -U '^' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-utf-scan-to-char RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -U '^' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-utf-scan-to-char RC=$?" >>testtrygrep
+
+  # The continuation bytes run up to the newline, and then up to the end of the
+  # subject, when there is no newline to stop the scan.
+  printf 'x\200\200\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -U '^' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-utf-scan-to-newline RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -U '^' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-utf-scan-to-newline RC=$?" >>testtrygrep
+  printf 'x\200\200' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -U '^' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-utf-scan-to-end RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -U '^' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-utf-scan-to-end RC=$?" >>testtrygrep
+
+  # A subject that is nothing but continuation bytes, so the very first match
+  # is empty and the scan immediately reaches the end.
+  printf '\200\200' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -U '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-utf-only-continuations RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -U '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-utf-only-continuations RC=$?" >>testtrygrep
+
+  # Continuation bytes at the end of a multi-line subject, reached after an
+  # empty match on an earlier line, and after a match that spans lines.
+  printf 'a\nb\n\n\200\200' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -M -U '.?' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-utf-trailing RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M -U '$' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-utf-trailing-empty RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -M --colour=always -U '(?s)a.*b|$' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-colour-utf-trailing-spanning RC=$?" >>testtrygrep
+
+  echo "---------------------------- Test U13 ------------------------------" >>testtrygrep
+  # The same restart, but reached by \K rather than by an empty match.
+  printf 'abc\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n --colour=always -u --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-bsk RC=$?" >>testtrygrep
+  printf 'a\nb\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -M -u --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-bsk RC=$?" >>testtrygrep
+
+  # The same, but with the restart landing on invalid UTF-8.
+  printf 'x\200\200y\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit -n --colour=always -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "colour-bsk-utf-scan-to-char RC=$?" >>testtrygrep
+  printf 'x\200\200' >testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit -n -M -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-bsk-utf-scan-to-end RC=$?" >>testtrygrep
+  printf 'a\nx\200\200' >testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit -n -M --colour=always -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-colour-bsk-utf-trailing RC=$?" >>testtrygrep
+
+
+  echo "---------------------------- Test U14 ------------------------------" >>testtrygrep
+
+  # A pattern that keeps making progress, so the restart is the ordinary one
+  # and the line is never advanced. This is the path the other U14 tests build on.
+  printf 'abcabc\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -o -u 'a.' testtemp1grep >>testtrygrep 2>&1
+  echo "control-progress RC=$?" >>testtrygrep
+
+  # An empty match, which is the case the restart exists for. "$" matches only
+  # at the end of the subject, so the restart is immediately at the end; "^"
+  # matches at the start, so it has to step forward by one character first.
+  $valgrind $vjs $pcre2grep -n -o -u '$' testtemp1grep >>testtrygrep 2>&1
+  echo "empty-at-end RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -o -u '^' testtemp1grep >>testtrygrep 2>&1
+  echo "empty-at-start RC=$?" >>testtrygrep
+
+  # \K in a lookbehind reports a non-empty match that ends no later than the
+  # offset it was started from. PCRE2_NOTEMPTY is set once a match has been
+  # found, so this, unlike an empty match, can stop the loop making progress on
+  # every iteration and not just the first.
+  $valgrind $vjs $pcre2grep -n -o -u --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "bsk-restart RC=$?" >>testtrygrep
+
+  # The step forward lands on invalid UTF-8, so the scan over continuation
+  # bytes runs. Here it stops at the start of the next character, and then at
+  # the newline, both of which are within the subject.
+  printf 'x\200\200y\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit -n -o -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "bsk-utf-scan-to-char RC=$?" >>testtrygrep
+  printf 'x\200\200\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit -n -o -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "bsk-utf-scan-to-newline RC=$?" >>testtrygrep
+
+  # The same, but with no newline to stop the scan, so it runs to the end of
+  # the subject and then looks at the byte after it.
+  printf 'x\200\200' >testtemp1grep
+  $valgrind $vjs $pcre2grep --no-jit -n -o -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1
+  echo "bsk-utf-scan-to-end RC=$?" >>testtrygrep
+
+  # Moving on to another line, which only happens in multiline mode. The first
+  # match ends exactly at the start of the next line, so the line is advanced
+  # and the line number with it; the second ends two lines further on.
+  printf 'ab\ncd\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -o -M -u 'ab\n' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-line-boundary RC=$?" >>testtrygrep
+  printf 'ab\ncd\nef\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -o -M -u '(?s)ab.*ef' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-spanning RC=$?" >>testtrygrep
+
+  # An empty match in multiline mode, where the step forward is what takes the
+  # restart past the end of the line.
+  printf 'a\nb\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -o -M -u '$' testtemp1grep >>testtrygrep 2>&1
+  echo "multiline-empty RC=$?" >>testtrygrep
+
+  # A match that ends between the CR and the LF of a CRLF line ending, so the
+  # restart is past the text of the line but short of the start of the next
+  # one. Without -M the line is never advanced, so that is the control.
+  printf 'ab\r\ncd\r\n' >testtemp1grep
+  $valgrind $vjs $pcre2grep -n -o -N CRLF '\r' testtemp1grep >>testtrygrep 2>&1
+  echo "crlf-not-multiline RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -o -M -N CRLF '\r' testtemp1grep >>testtrygrep 2>&1
+  echo "crlf-mid-terminator RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -n -o -M -N ANY '\r' testtemp1grep >>testtrygrep 2>&1
+  echo "any-mid-terminator RC=$?" >>testtrygrep
+  $valgrind $vjs $pcre2grep -M -N CRLF --line-offsets '\r' testtemp1grep >>testtrygrep 2>&1
+  echo "crlf-mid-terminator-line-offsets RC=$?" >>testtrygrep
+
   $cf $srcdir/testdata/grepoutput8 testtrygrep
   if [ $? != 0 ] ; then exit 1; fi
 
@@ -1159,6 +1359,7 @@ checkspecial "-e (unpaired1 -e (unpaired2 /dev/null" 2
 
 # Clean up local working files
 rm -f testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep
+rm -f ./-testtemp1grep ./--
 
 exit 0
 
index 3c918e32f2622228d475950754861179c4e1c959..38eeabee566c9d5d3cf54f63179387d331a3de1d 100644 (file)
@@ -81,16 +81,32 @@ if NOT "%nl%" == "LF" if NOT "%nl%" == "ANY" if NOT "%nl%" == "ANYCRLF" (
   echo Default newline setting forced to LF\r
 )\r
 \r
-:: Create a simple printf via cscript/JScript (an actual printf may translate\r
-:: LF to CRLF, which this one does not).  We only support the barebones we need:\r
-:: \r, \n, \0, and %s (but only once).\r
+:: Provide "printf" and "tr" via pcre2test. Windows has no dependable version\r
+:: of either: the obvious candidates translate what they write according to the\r
+:: current code page, which mangles any byte greater than 0x7f, and an actual\r
+:: printf may turn LF into CRLF. pcre2test has undocumented options that do just\r
+:: as much as these tests need, so that this script can produce exactly the same\r
+:: bytes as RunGrepTest does with the real printf and tr.\r
+::\r
+:: %printf% supports \r, \n, \\, an octal escape such as \0 or \200, and one\r
+:: %%s substitution; any other escape is left alone, so a literal backslash\r
+:: has to be written as \\. %tr% changes one byte value into another as it\r
+:: copies its input.\r
 \r
-echo WScript.StdOut.Write(WScript.Arguments(0).replace(/\\r/g, "\r").replace(/\\n/g, "\n").replace(/\\0/g, "\x00").replace(/%%s/g, function() { return WScript.Arguments(1) })) >printf.js\r
-set printf=cscript //nologo printf.js\r
+set printf=%pcre2test% -printf\r
+set tr=%pcre2test% -tr\r
 \r
-:: Create a simple 'tr' via cscript/JScript.\r
-echo WScript.StdOut.Write(WScript.StdIn.ReadAll().replace(/\x00/g, "@")) >trnull.js\r
-set trnull=cscript //nologo trnull.js\r
+:: pcre2grep ends the lines it writes with CRLF on Windows and with LF\r
+:: elsewhere, which comparison copes with, but a line whose own text ends with\r
+:: CR then comes out with one CR too many. %fixcrlf% removes it, for tests that\r
+:: match a CR at the end of a line.\r
+\r
+set fixcrlf=%pcre2test% -fixcrlf\r
+\r
+:: The script callout tests run printf as a callout, where the program name\r
+:: cannot be quoted, so keep an unquoted version of the path for them.\r
+\r
+set pcre2test_unquoted=%pcre2test:"=%\r
 \r
 :: ------ Normal tests ------\r
 \r
@@ -707,11 +723,11 @@ echo ---------------------------- Test 134 ----------------------------->>testtr
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
 echo ---------------------------- Test 135 ----------------------------->>testtrygrep\r
-(pushd %srcdir% & %pcre2grep% -HZ "word" ./testdata/grepinputv & popd) | %trnull% >>testtrygrep\r
+(pushd %srcdir% & %pcre2grep% -HZ "word" ./testdata/grepinputv & popd) | %tr% \0 @ >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
-(pushd %srcdir% & %pcre2grep% -lZ "word" ./testdata/grepinputv ./testdata/grepinputv & popd) | %trnull% >>testtrygrep\r
+(pushd %srcdir% & %pcre2grep% -lZ "word" ./testdata/grepinputv ./testdata/grepinputv & popd) | %tr% \0 @ >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
-(pushd %srcdir% & %pcre2grep% -A 1 -B 1 -HZ "word" ./testdata/grepinputv & popd) | %trnull% >>testtrygrep\r
+(pushd %srcdir% & %pcre2grep% -A 1 -B 1 -HZ "word" ./testdata/grepinputv & popd) | %tr% \0 @ >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 (pushd %srcdir% & %pcre2grep% -MHZn "start[\s]+end" testdata/grepinputM & popd) >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
@@ -741,7 +757,7 @@ echo ---------------------------- Test 140 ----------------------------->>testtr
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
 echo ---------------------------- Test 141 ----------------------------->>testtrygrep\r
-%printf% "%%s\testdata\grepinputv\n-\n" "%srcdir%" >testtemp1grep\r
+%printf% "%%s\\testdata\\grepinputv\n-\n" "%srcdir%" >testtemp1grep\r
 %printf% "This is a line from stdin." >testtemp2grep\r
 %pcre2grep% --file-list testtemp1grep "line from stdin" <testtemp2grep >>testtrygrep 2>&1\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
@@ -778,6 +794,17 @@ echo RC=^%ERRORLEVEL%>>testtrygrep
 echo ---------------------------- Test 147 ----------------------------->>testtrygrep\r
 %pcre2grep% -e "123|fox" -- -nonfile >>testtrygrep 2>&1\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%printf% "A123B" >testtemp1grep\r
+%printf% "C123D" >.\-testtemp1grep\r
+%pcre2grep% "123" -- -testtemp1grep >>testtrygrep 2>&1\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%pcre2grep% "123" testtemp1grep -- -testtemp1grep >>testtrygrep 2>&1\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%pcre2grep% "123" -- <testtemp1grep >>testtrygrep 2>&1\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%printf% "E123F" >.\--\r
+%pcre2grep% -- "123" -- >>testtrygrep 2>&1\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
 echo ---------------------------- Test 148 ----------------------------->>testtrygrep\r
 %pcre2grep% --nonexist >>testtrygrep 2>&1\r
@@ -870,6 +897,17 @@ echo RC=^%ERRORLEVEL%>>testtrygrep
 (pushd %srcdir% & %pcre2grep% -n -B4 -A2 "^(ert|dfg)" ./testdata/grepinput & popd) >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
+echo ---------------------------- Test 161 ----------------------------->>testtrygrep\r
+%printf% "XfooY\n" >testNinputgrep\r
+%pcre2grep% --allow-lookaround-bsk -o "(?=foo\K)" testNinputgrep >>testtrygrep\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%pcre2grep% --allow-lookaround-bsk --output "$0" "(?=foo\K)" testNinputgrep >>testtrygrep\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%pcre2grep% --allow-lookaround-bsk --line-offsets "(?=foo\K)" testNinputgrep >>testtrygrep\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+%pcre2grep% --allow-lookaround-bsk --file-offsets "(?=foo\K)" testNinputgrep >>testtrygrep\r
+echo RC=^%ERRORLEVEL%>>testtrygrep\r
+\r
 :: Now compare the results.\r
 \r
 %cf% %srcdir%\testdata\grepoutput testtrygrep %cfout%\r
@@ -921,6 +959,190 @@ if %utf8% neq 0 (
   (pushd %srcdir% & %pcre2grep% -u --posix-digit --colour=always "A\d" ./testdata/grepinput8 & popd) >>testtrygrep\r
   echo RC=^!ERRORLEVEL!>>testtrygrep\r
 \r
+  echo ---------------------------- Test U11 ------------------------------>>testtrygrep\r
+  %printf% "................................................" | %tr% . \200 >testtemp1grep\r
+  %printf% "x\n" >>testtemp1grep\r
+  %pcre2grep% --no-jit --buffer-size=16 -U --allow-lookaround-bsk -o "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo only-matching RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% --no-jit --buffer-size=16 -U --allow-lookaround-bsk -M "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% --no-jit --buffer-size=16 -U --allow-lookaround-bsk --colour=always "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  echo ---------------------------- Test U12 ------------------------------>>testtrygrep\r
+  @REM Colouring only, so the subject is a single line. An empty match at the end\r
+  @REM of the subject, then one that matches before retrying at the end.\r
+  %printf% "abc\n" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -u "$" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-empty-at-end RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n --colour=always -u ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-nonempty-then-empty RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n --colour=always -u "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-empty-at-start RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM An empty line, so the first match is empty with nothing following it, and a\r
+  @REM final line with no newline, so a restart can reach the end of the line.\r
+  %printf% "\nabc\n" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -u ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-empty-line RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "abc" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -u ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-no-final-newline RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM Multiline, where a restart may have to move on to a following line.\r
+  %printf% "a\nb\n" >testtemp1grep\r
+  %pcre2grep% -n -M -u "$" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-empty-at-line-end RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -u "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-empty-at-line-start RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -u ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-nonempty-then-empty RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM A match that spans several lines, so that the restart has to skip over more\r
+  @REM than one line before looking for the next match.\r
+  %printf% "a\nb\nc\nd\n" >testtemp1grep\r
+  %pcre2grep% -n -M -u "(?s)a.*c" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-spanning RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -u "(?s)a.*c|$" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-spanning-then-empty RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M --colour=always -u "(?s)a.*c|$" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-colour-spanning RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM Invalid UTF-8 after an empty match, which is when the scan over\r
+  @REM continuation bytes that follow the restart point can run. Here the scan\r
+  @REM stops at the start of the next character.\r
+  %printf% "x\200\200y\n" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -U "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -U "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM The continuation bytes run up to the newline, and then up to the end of the\r
+  @REM subject, when there is no newline to stop the scan.\r
+  %printf% "x\200\200\n" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -U "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-utf-scan-to-newline RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -U "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-utf-scan-to-newline RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "x\200\200" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -U "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -U "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM A subject that is nothing but continuation bytes, so the very first match\r
+  @REM is empty and the scan immediately reaches the end.\r
+  %printf% "\200\200" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -U ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-utf-only-continuations RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -U ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-utf-only-continuations RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM Continuation bytes at the end of a multi-line subject, reached after an\r
+  @REM empty match on an earlier line, and after a match that spans lines.\r
+  %printf% "a\nb\n\n\200\200" >testtemp1grep\r
+  %pcre2grep% -n -M -U ".?" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-utf-trailing RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M -U "$" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-utf-trailing-empty RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -M --colour=always -U "(?s)a.*b|$" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-colour-utf-trailing-spanning RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  echo ---------------------------- Test U13 ------------------------------>>testtrygrep\r
+  @REM The same restart, but reached by \K rather than by an empty match.\r
+  %printf% "abc\n" >testtemp1grep\r
+  %pcre2grep% -n --colour=always -u --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-bsk RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "a\nb\n" >testtemp1grep\r
+  %pcre2grep% -n -M -u --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-bsk RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM The same, but with the restart landing on invalid UTF-8.\r
+  %printf% "x\200\200y\n" >testtemp1grep\r
+  %pcre2grep% --no-jit -n --colour=always -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo colour-bsk-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "x\200\200" >testtemp1grep\r
+  %pcre2grep% --no-jit -n -M -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-bsk-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "a\nx\200\200" >testtemp1grep\r
+  %pcre2grep% --no-jit -n -M --colour=always -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-colour-bsk-utf-trailing RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  echo ---------------------------- Test U14 ------------------------------>>testtrygrep\r
+\r
+  @REM A pattern that keeps making progress, so the restart is the ordinary one\r
+  @REM and the line is never advanced. This is the path the other U14 tests build on.\r
+  %printf% "abcabc\n" >testtemp1grep\r
+  %pcre2grep% -n -o -u "a." testtemp1grep >>testtrygrep 2>&1\r
+  echo control-progress RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM An empty match, which is the case the restart exists for. "$" matches only\r
+  @REM at the end of the subject, so the restart is immediately at the end; "^"\r
+  @REM matches at the start, so it has to step forward by one character first.\r
+  %pcre2grep% -n -o -u "$" testtemp1grep >>testtrygrep 2>&1\r
+  echo empty-at-end RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -o -u "^" testtemp1grep >>testtrygrep 2>&1\r
+  echo empty-at-start RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM \K in a lookbehind reports a non-empty match that ends no later than the\r
+  @REM offset it was started from. PCRE2_NOTEMPTY is set once a match has been\r
+  @REM found, so this, unlike an empty match, can stop the loop making progress on\r
+  @REM every iteration and not just the first.\r
+  %pcre2grep% -n -o -u --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo bsk-restart RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM The step forward lands on invalid UTF-8, so the scan over continuation\r
+  @REM bytes runs. Here it stops at the start of the next character, and then at\r
+  @REM the newline, both of which are within the subject.\r
+  %printf% "x\200\200y\n" >testtemp1grep\r
+  %pcre2grep% --no-jit -n -o -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo bsk-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "x\200\200\n" >testtemp1grep\r
+  %pcre2grep% --no-jit -n -o -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo bsk-utf-scan-to-newline RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM The same, but with no newline to stop the scan, so it runs to the end of\r
+  @REM the subject and then looks at the byte after it.\r
+  %printf% "x\200\200" >testtemp1grep\r
+  %pcre2grep% --no-jit -n -o -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1\r
+  echo bsk-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM Moving on to another line, which only happens in multiline mode. The first\r
+  @REM match ends exactly at the start of the next line, so the line is advanced\r
+  @REM and the line number with it; the second ends two lines further on.\r
+  %printf% "ab\ncd\n" >testtemp1grep\r
+  %pcre2grep% -n -o -M -u "ab\n" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-line-boundary RC=^!ERRORLEVEL!>>testtrygrep\r
+  %printf% "ab\ncd\nef\n" >testtemp1grep\r
+  %pcre2grep% -n -o -M -u "(?s)ab.*ef" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-spanning RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM An empty match in multiline mode, where the step forward is what takes the\r
+  @REM restart past the end of the line.\r
+  %printf% "a\nb\n" >testtemp1grep\r
+  %pcre2grep% -n -o -M -u "$" testtemp1grep >>testtrygrep 2>&1\r
+  echo multiline-empty RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
+  @REM A match that ends between the CR and the LF of a CRLF line ending, so the\r
+  @REM restart is past the text of the line but short of the start of the next\r
+  @REM one. Without -M the line is never advanced, so that is the control.\r
+  @REM These match a CR at the end of a line, which pcre2grep then follows with\r
+  @REM STDOUT_NL, so the CR has to be unpicked from the line ending to match\r
+  @REM what RunGrepTest produces. See the -fixcrlf helper in pcre2test.\r
+  %printf% "ab\r\ncd\r\n" >testtemp1grep\r
+  %pcre2grep% -n -o -N CRLF "\r" testtemp1grep >>testtrygrep 2>&1\r
+  echo crlf-not-multiline RC=^!ERRORLEVEL!>>testtrygrep\r
+  %pcre2grep% -n -o -M -N CRLF "\r" testtemp1grep >testtemp2grep 2>&1\r
+  set rc=^!ERRORLEVEL!\r
+  %fixcrlf% <testtemp2grep >>testtrygrep\r
+  echo crlf-mid-terminator RC=^!rc!>>testtrygrep\r
+  %pcre2grep% -n -o -M -N ANY "\r" testtemp1grep >testtemp2grep 2>&1\r
+  set rc=^!ERRORLEVEL!\r
+  %fixcrlf% <testtemp2grep >>testtrygrep\r
+  echo any-mid-terminator RC=^!rc!>>testtrygrep\r
+  %pcre2grep% -M -N CRLF --line-offsets "\r" testtemp1grep >>testtrygrep 2>&1\r
+  echo crlf-mid-terminator-line-offsets RC=^!ERRORLEVEL!>>testtrygrep\r
+\r
   %cf% %srcdir%\testdata\grepoutput8 testtrygrep %cfout%\r
   if ERRORLEVEL 1 exit /b 1\r
 \r
@@ -951,7 +1173,11 @@ echo RC=^%ERRORLEVEL%>>testtrygrep
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
 echo ---------------------------- Test N3 ------------------------------>>testtrygrep\r
-for /f %%a in ('%printf% "def\rjkl"') do set pattern=%%a\r
+@REM The pattern contains a CR, which for /f keeps, but the command has to be\r
+@REM read from a file: %printf% starts with a quoted path, and cmd mangles the\r
+@REM quoting of a command given directly to for /f.\r
+%printf% "def\rjkl" >testtemp1grep\r
+for /f %%a in (testtemp1grep) do set pattern=%%a\r
 %pcre2grep% -n --newline=cr -F "!pattern!" testNinputgrep >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
@@ -973,9 +1199,9 @@ echo RC=^%ERRORLEVEL%>>testtrygrep
 \r
 echo ---------------------------- Test N7 ------------------------------>>testtrygrep\r
 %printf% "xyz\0abc\0def" >testNinputgrep\r
-%pcre2grep% -na --newline=nul "^(abc|def)" testNinputgrep | %trnull% >>testtrygrep\r
+%pcre2grep% -na --newline=nul "^(abc|def)" testNinputgrep | %tr% \0 @ >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
-%pcre2grep% -B1 -na --newline=nul "^(abc|def)" testNinputgrep | %trnull% >>testtrygrep\r
+%pcre2grep% -B1 -na --newline=nul "^(abc|def)" testNinputgrep | %tr% \0 @ >>testtrygrep\r
 echo RC=^%ERRORLEVEL%>>testtrygrep\r
 \r
 echo ---------------------------- Test N8 ------------------------------>>testtrygrep\r
@@ -1030,7 +1256,7 @@ if %ERRORLEVEL% equ 0 (
   %pcre2grep% "(T)(?C'|$0:$1$n')" %srcdir%\testdata\grepinputv >>testtrygrep\r
   echo RC=^!ERRORLEVEL!>>testtrygrep\r
   echo --- Test 4 --->>testtrygrep\r
-  %pcre2grep% "(T)(?C'cscript|//nologo|printf.js|%%s\r\n|$0:$1$n')" %srcdir%\testdata\grepinputv >>testtrygrep\r
+  %pcre2grep% "(T)(?C'%pcre2test_unquoted%|-printf|%%s\r\n|$0:$1$n')" %srcdir%\testdata\grepinputv >>testtrygrep\r
   echo RC=^!ERRORLEVEL!>>testtrygrep\r
   echo --- Test 5 --->>testtrygrep\r
   %pcre2grep% "(T)(?C'|$1$n')(*F)" %srcdir%\testdata\grepinputv >>testtrygrep\r
@@ -1058,7 +1284,7 @@ if %ERRORLEVEL% equ 0 (
     %pcre2grep% -u "(T)(?C'|$0:$x{a6}$n')" %srcdir%\testdata\grepinputv >>testtrygrep\r
     echo RC=^!ERRORLEVEL!>>testtrygrep\r
     echo --- Test 2 --->>testtrygrep\r
-    %pcre2grep% -u "(T)(?C'cscript|//nologo|printf.js|%%s\r\n|$0:$x{a6}$n')" %srcdir%\testdata\grepinputv >>testtrygrep\r
+    %pcre2grep% -u "(T)(?C'%pcre2test_unquoted%|-printf|%%s\r\n|$0:$x{a6}$n')" %srcdir%\testdata\grepinputv >>testtrygrep\r
     echo RC=^!ERRORLEVEL!>>testtrygrep\r
 \r
     if ^!nonfork! equ 1 (\r
@@ -1095,7 +1321,7 @@ call :checkspecial "-e (unpaired1 -e (unpaired2 nul" 2 || exit /b 1
 \r
 \r
 :: Clean up local working files\r
-del testcf printf.js trnull.js testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep\r
+del testcf testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep -testtemp1grep --\r
 \r
 exit /b 0\r
 \r
diff --git a/RunTest b/RunTest
index 57a03455af10735c0ff77e9202dae20c8c54541a..306427b66cdecbb0571a6c6daebfedc1c31e2d48 100755 (executable)
--- a/RunTest
+++ b/RunTest
@@ -175,9 +175,12 @@ checkresult()
     *)    with="";;
   esac
   cf_out="$testdata/testoutput$2"
-  if [ $ebcdic -eq 1 ] ; then
-    # We currently only use the #if ... #endif support in pcre2test for EBCDIC
-    # testing. Run in "preprocess-only" mode (-E) on the testoutput file to trim
+  if [ $ebcdic -eq 1 ] || [ $utf -eq 0 ]; then
+    # We currently only use the #if ... #endif support in pcre2test for tests
+    # which are excluded in certain builds:
+    #   - EBCDIC
+    #   - No-UTF
+    # Run in "preprocess-only" mode (-E) on the testoutput file to trim
     # the output lines matching the input lines which are discarded.
     $sim $pcre2test -q -E "$cf_out" >testoutput$bits$3/testoutput$2-expected
     cf_out=testoutput$bits$3/testoutput$2-expected
index a9cd7c166e00b5fe22ec6af4c2a1b90a83f7d4fb..4bbe5cd09196816fef55a3ce9259e6ecd71a574e 100644 (file)
@@ -22,11 +22,12 @@ Git checkout of the (GPG-signed) release tag.
 Please contact the maintainers for any queries about release integrity or the
 project's supply-chain.
 
-Previous vulnerabilities
-------------------------
+Support lifecycle
+-----------------
 
-* CVE-2025-58050 (August 2025). Affects 10.45 only (not earlier), and is fixed
-  in 10.46.
+See the documentation under [SUPPORT-LIFECYCLE](./SUPPORT-LIFECYCLE.md) for
+details on how to distribute versions of PCRE2 older than the latest, with
+backported security and high-severity bug fixes.
 
 Reporting vulnerabilities
 -------------------------
@@ -47,8 +48,7 @@ aim to respond within 1 week, or perhaps 2 during holidays.
 
 ### Response procedure
 
-PCRE2 has in the past made at least one rapid release in response to
-security incidents.
+PCRE2 has in the past made rapid releases in response to security incidents.
 
 We have never produced an embargoed release, or provided preferential
 access to security fixes to any clients.
@@ -57,3 +57,25 @@ We would aim to notify security managers from trusted downstream distributors,
 such as major Linux distributions, via the `pcre2-dev` mailing list, by
 publicly signalling an upcoming security release before disclosing the
 vulnerability publicly, where advance notification is possible.
+
+Previous vulnerabilities
+------------------------
+
+* CVE-2025-58050 (August 2025). Affects 10.45 only (not earlier), and is fixed
+  in 10.46.
+* CVE-2022-41409 (July 2023). Only affects test code; no expected impact. Fixed
+  in 10.41.
+* CVE-2022-1587 and CVE-2022-1586 (May 2020). Affect versions before 10.40, and
+  fixed in 10.40.
+* CVE-2019-20454 (February 2020). Affects versions 10.31 to 10.33, and is fixed
+  in 10.34.
+* CVE-2017-8786 (May 2017). Only affects test code. Fixed in 10.30.
+* CVE-2017-8399 (May 2017). High severity. Fixed in 10.30.
+* CVE-2017-7186 (March 2017). Fixed in 10.30.
+* CVE-2016-3191 (March 2016). High severity. Fixed in 10.22.
+* CVE-2015-8381, CVE-2015-3217 and CVE-2015-3210 (December 2015). High severity.
+  Fixed in 10.20.
+
+Common Platform Enumeration (CPE) names:
+* CPE name version 2.3: `cpe:2.3:a:pcre:pcre2:-:*:*:*:*:*:*:*`
+* CPE name version 2.2: `cpe:/a:pcre:pcre2:-`
diff --git a/SUPPORT-LIFECYCLE.md b/SUPPORT-LIFECYCLE.md
new file mode 100644 (file)
index 0000000..7d067b0
--- /dev/null
@@ -0,0 +1,262 @@
+# PCRE2 Support Lifecycle
+
+This document outlines the support lifecycle policy for PCRE2 releases. It is
+intended to provide clear guidance to distributors on the supported versions of
+PCRE2, and the actions required to distribute older versions of PCRE2 securely.
+
+## Release policy
+
+PCRE2 releases follow a rolling version policy. There is one linear history of
+releases, with each new release providing a mixture of enhancements and fixes to
+the previous release.
+
+PCRE2 is designed to have a high level of backwards-compatibility and stability.
+Where possible, we recommend that consumers of the library update to the latest
+version.
+
+However, we recognise that Linux distributions in particular bundle older
+versions for many years. To enable this practice, this document provides advice
+on how to package and distribute older releases of PCRE2.
+
+This document will be updated with each new PCRE2 release to reflect the current
+support status and any new lifecycle recommendations.
+
+## Actions for PCRE2 distributors and packagers
+
+* Check this document on each release of PCRE2.
+* Each version of PCRE2 that you are supporting should be listed here.
+* Check for any changes in the "patches to apply" section, and consider
+  backporting these.
+
+## Support Policy
+
+1. Each PCRE2 version will be supported for at least 5 years from its release
+   date.
+2. Selected releases older than 5 years may continue to receive support if they
+   are actively distributed.
+3. For supported versions, security and high-severity bug fixes will be
+   backported and listed in this document.
+
+The following distributions have been considered to determine support
+requirements:
+
+- RHEL/CentOS/Fedora: Long lifecycle. Although it's listed at 10+ years, there
+  is effectively a freeze after five years of "Full Support", with presumably only
+  CVE fixes being backported after that during "Maintenance Support".
+
+  Packages: https://src.fedoraproject.org/rpms/pcre2
+
+  Packages: https://gitlab.com/redhat/centos-stream/rpms/pcre2
+
+- Debian: Five year lifecycle. There is a three-year period of full support. In
+  practice, backports to "oldoldstable" releases are made only if absolutely
+  required, such as a CVE that requires fixing for compliance reasons. The
+  "stable" and "oldstable" releases actively accumulate backported fixes.
+
+  Packages: https://tracker.debian.org/pkg/pcre2
+
+- Ubuntu: Five year LTS. I believe most customers update fairly promptly every
+  two years, and few if any non-security backports are made to LTS releases
+  older than the current one.
+
+  Packages: https://code.launchpad.net/ubuntu/+source/pcre2
+
+- Alpine: Two year lifecycle.
+
+  Packages: https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/main/pcre2?ref_type=heads
+
+- SUSE: Extremely long lifecycle; PCRE2 will stop backporting fixes long before
+  SUSE drops support.
+
+  Packages: https://build.opensuse.org/package/show/openSUSE:Factory/pcre2
+
+- Arch: Rolling release. No need for backports. However, it is a major upstream
+  packaging source for the Arch-based ecosystem.
+
+  Packages: https://gitlab.archlinux.org/archlinux/packaging/packages/pcre2
+
+- Other notable primary packaging sources include:
+  * Gentoo
+
+    https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-libs/libpcre2
+
+  * NixOS
+
+    https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/pcre2/default.nix
+
+Please contact us if you would like the PCRE2 maintainers to be aware of your
+packages, particularly if you are a distributor of PCRE2, and provide a support
+lifecycle for old (not-latest) PCRE2 releases.
+
+## Supported Versions
+
+Below is the list of supported PCRE2 versions. For each version, specific
+recommendations and backported fixes (if any) are provided.
+
+### PCRE2 10.32 10-September-2018
+
+* Shipped in RHEL/CentOS 8 (EOL 31 May 2024).
+
+This version is older than 5 years, but remains listed in SUPPORT-LIFECYCLE.md
+potentially until May 2029 (end of "Maintenance Support" for RHEL 8), in
+recognition that customer workloads may be using this version until then.
+
+I am not providing a recommendation of what patches to apply. Distributors still
+shipping this release have likely frozen their codebase at this point.
+
+For the record, RHEL 8 used the following sets of patches:
+https://src.fedoraproject.org/rpms/pcre2/tree/f28,
+https://gitlab.com/redhat/centos-stream/rpms/pcre2/-/tree/c8s?ref_type=heads
+
+The most serious of these was the backported mitigation for CVE-2019-20454 from
+the fix in 10.34.
+
+### PCRE2 10.36 04-December-2020
+
+* Shipped in Debian 11 "Bullseye" (EOL 31 Aug 2026).
+
+I am not providing a recommendation of what patches to apply. Distributors still
+shipping this release have likely frozen their codebase at this point, since the
+release of Debian 12.
+
+### PCRE2 10.37 26-May-2021
+
+I am not providing a recommendation of what patches to apply. I am not aware of
+any Linux distributions providing extended support for 10.37. I have not tested
+this release with any backported fixes applied.
+
+Patches introduced:
+* `patches/pcre2-10.37-Remove-real-POSIX.patch`: To be backported to older
+  versions as required. This changes a behaviour which has been present since
+  the beginning of PCRE2's libpcre2posix.so, although the behaviour was updated
+  in 10.33. Versions prior to 10.33 cannot benefit from the backport; versions
+  10.33-10.36 may use the backport at the distributor's discretion (that is, if
+  users have requested it; but it is not needed otherwise).
+
+### PCRE2 10.38 01-October-2021
+
+Do not use (update to 10.39).
+
+### PCRE2 10.39 29-October-2021
+
+* Shipped in Ubuntu 22.04 "Jammy Jellyfish" (EOL 01 Apr 2027).
+
+I am not providing a recommendation of what patches to apply. Distributors still
+shipping this release have likely frozen their codebase at this point, since the
+release of Ubuntu 24.04.
+
+Patches introduced:
+* `patches/pcre2-10.39-Fix-incorrect-detection.patch`: Significant bugfix for
+  JIT matching
+
+### PCRE2 10.40 15-April-2022
+
+* Shipped in RHEL/CentOS 9 (EOL 31 May 2027).
+
+I am not providing a recommendation of what patches to apply. Distributors still
+shipping this release have likely frozen their codebase at this point, since the
+release of RHEL 10.
+
+For the record, RHEL/CentOS 9 ships rather more backported patches than other
+distributions:
+https://gitlab.com/redhat/centos-stream/rpms/pcre2/-/tree/c9s?ref_type=heads
+
+Some of these patches may be relevant to other distributions, but I have not
+tested them myself for compatibility with 10.40 or other earlier releases.
+
+Patches introduced:
+* `patches/pcre2-10.40-A-Fixed-a-unicode.patch`: Fixed CVE-2022-1586. This
+  affects all recent previous versions of PCRE2.
+* `patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch`: Fixed CVE-2022-1587.
+  This affects all recent previous versions of PCRE2.
+
+### PCRE2 10.41 06-December-2022
+
+Do not use (update to 10.42).
+
+Introduced the fix for CVE-2022-41409. This only affects the pcre2test runner
+for the test suite, so this fix is not backported.
+
+### PCRE2 10.42 11-December-2022
+
+* Shipped in Debian 12 "Bookworm" (EOL 30 Jun 2028).
+* Shipped in Ubuntu 24.04 "Noble Numbat" (EOL 25 Apr 2029).
+
+Users on RISC-V are advised to update to 10.43, or not use the JIT unless using
+a backport for https://github.com/zherczeg/sljit/pull/223. Given the small
+RISC-V userbase (especially on older releases), disabling the JIT for RISC-V
+builds is likely acceptable.
+
+Patches to apply:
+* `patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch`
+* `patches/pcre2-10.43-Fix-heapframe-overflow.patch`
+
+### PCRE2 10.43 16-February-2024
+
+* Shipped in Alpine 3.20 (EOL 01 Apr 2026)
+* Shipped in Alpine 3.21 (EOL 01 Nov 2026)
+
+Patches to apply:
+* `patches/pcre2-10.44-Fix-locking-region.patch`
+* `patches/pcre2-10.44-Fix-incorrect-compiling.patch`
+
+Patches introduced:
+* `patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch`: Fix integer overflow in
+  handling of LIMIT_HEAP. This is not a critical fix for backporting, and in
+  10.41, the code for handling the heapframes changed to always using a
+  heap-allocated frames vector. This patch is therefore recommended for
+  backporting to 10.42 only.
+* `patches/pcre2-10.43-Fix-heapframe-overflow.patch`: Fix buffer overrun in
+  handling of LIMIT_HEAP. These patches can be backported to all recent previous
+  versions (since LIMIT_HEAP was introduced in 10.30).
+
+### PCRE2 10.44 07-June-2024
+
+* Shipped in RHEL/CentOS 10 (EOL 31 May 2030).
+
+Patches to apply:
+* `patches/pcre2-10.45-Memory-reports-only-compiled.patch`
+
+Patches introduced:
+* `patches/pcre2-10.44-Fix-locking-region.patch`: To be backported to 10.43 only
+  (bug introduced in 10.43). Crashes in multithreaded applications using the PCRE2
+  JIT were likely in 10.43 without this patch.
+* `patches/pcre2-10.44-Fix-incorrect-compiling.patch`: Fixes a bug causing
+  incorrect compilation of certain patterns which could crashes, for backporting
+  to 10.43. Because 10.42 and earlier required fixed-length lookbehinds, the
+  patch does not require backporting to earlier versions.
+
+### PCRE2 10.45 05-February-2025
+
+Do not use (update to 10.46, which is is a drop-in compatible release with a
+security fix).
+
+Patches introduced:
+* `patches/pcre2-10.45-Memory-reports-only-compiled.patch`: To be backported to
+  10.44 only. This is a test-only fix, so is not important to backport unless
+  test suite failures are observed.
+
+### PCRE2 10.46 27-August-2025
+
+* Shipped in Debian 13 "Trixie" (EOL 30 Jun 2030).
+* Shipped in Alpine 3.22 (EOL 01 May 2027)
+
+Introduced the fix for CVE-2025-58050. This only affects 10.45. Do not backport
+the patch (just update to 10.46).
+
+Patches to apply:
+* `patches/pcre2-10.47-Fix-for-callback.patch`
+
+### PCRE2 10.47 21-October-2025
+
+Patches introduced:
+* `patches/pcre2-10.47-Fix-for-callback.patch`: A fix for a significant memory
+  read overrun in a function rarely called by applications, to be backported to
+  10.45 and 10.46 only (bug introduced in 10.45).
+* There is a new and rewritten JIT implementation for the AArch64 SIMD code,
+  fixing crashes and out-of-bounds memory reads in the previous, legacy AArch64
+  JIT. This is probably not possible to backport.
+
+### PCRE2 10.48 27-August-2026
+
+**To be confirmed.**
index ea61c79a486237b7018433db21da1b8af1cd0c3e..e8154a93322f2baf683f2943861a5b4edeb12573 100644 (file)
@@ -1588,12 +1588,12 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
-m4_include([m4/ax_check_vscript.m4])
 m4_include([m4/ax_pthread.m4])
 m4_include([m4/libtool.m4])
 m4_include([m4/ltoptions.m4])
 m4_include([m4/ltsugar.m4])
 m4_include([m4/ltversion.m4])
 m4_include([m4/lt~obsolete.m4])
+m4_include([m4/pcre2_check_vscript.m4])
 m4_include([m4/pcre2_visibility.m4])
 m4_include([m4/pcre2_zos.m4])
index 960137ab3965b31cb89fa13708b754167df80dc3..61a13f23cebd75052f28ef00e6bac4b2aacdc555 100644 (file)
--- a/build.zig
+++ b/build.zig
@@ -7,77 +7,141 @@ pub const CodeUnitWidth = enum {
 };
 
 pub fn build(b: *std.Build) !void {
-    const target = b.standardTargetOptions(.{});
     const optimize = b.standardOptimizeOption(.{});
-    const linkage = b.option(std.builtin.LinkMode, "linkage", "whether to statically or dynamically link the library") orelse @as(std.builtin.LinkMode, if (target.result.isGnuLibC()) .dynamic else .static);
-    const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8";
-    const jit = b.option(bool, "support_jit", "Enable/disable JIT compiler support") orelse false;
-
-    const pcre2_header_dir = b.addWriteFiles();
-    const pcre2_header = pcre2_header_dir.addCopyFile(b.path("src/pcre2.h.generic"), "pcre2.h");
+    const target = b.standardTargetOptions(.{});
+    const rt = target.result;
 
-    const config_header = b.addConfigHeader(
+    const linkage = b.option(std.builtin.LinkMode, "linkage", "whether to statically or dynamically link the library") orelse @as(std.builtin.LinkMode, if (rt.isGnuLibC()) .dynamic else .static);
+    const sanitize_c = b.option(std.zig.SanitizeC, "sanitize_c", "whether to build with undefined behaviour sanitizer enabled") orelse .off;
+    const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8";
+    const support_jit = b.option(bool, "support_jit", "Enable/disable JIT compiler support") orelse false;
+
+    const sljit_is_checked_out = if (!support_jit)
+        false
+    else if (b.build_root.handle.access(
+        b.graph.io,
+        "deps/sljit/sljit_src/sljitLir.c",
+        .{},
+    )) |_| true else |err| switch (err) {
+        error.FileNotFound => false,
+        else => return err,
+    };
+
+    // We don't know how the sljit dependency is being provided. Either it
+    // comes via a git submodule, or it may be fetched by zig itself.
+    const sljit_include_path = if (!support_jit)
+        null
+    else if (sljit_is_checked_out)
+        null
+    else blk: {
+        const sljit = b.lazyDependency("sljit", .{}) orelse
+            break :blk null;
+
+        const files = b.addWriteFiles();
+
+        // Recreate the layout used by pcre2_jit_compile.c's relative include.
+        _ = files.addCopyDirectory(
+            sljit.path("sljit_src"),
+            "deps/sljit/sljit_src",
+            .{},
+        );
+        _ = files.add("src/.empty", "");
+
+        break :blk files.getDirectory().path(b, "src");
+    };
+
+    const pcre2_h_dir = b.addWriteFiles();
+    const pcre2_h = pcre2_h_dir.addCopyFile(b.path("src/pcre2.h.generic"), "pcre2.h");
+    b.addNamedLazyPath("pcre2.h", pcre2_h);
+
+    const is_unix = rt.os.tag != .windows;
+    const is_mingw = rt.isMinGW();
+    const is_musl = rt.isMuslLibC();
+    const is_glibc = rt.isGnuLibC();
+    const is_freebsd = rt.isFreeBSDLibC();
+
+    const cflags = &.{
+        "-fvisibility=hidden",
+    };
+
+    const config_h = b.addConfigHeader(
         .{
-            .style = .{ .cmake = b.path("src/config-cmake.h.in") },
+            .style = .{
+                .cmake = b.path("src/config-cmake.h.in"),
+            },
             .include_path = "config.h",
         },
+        // These options should be kept in-sync with those in config-cmake.h.in, and
+        // should be the same set of options (no more needed). It is permitted to
+        // specify fewer options here than in config-cmake.h.in, if an option is
+        // disabled in all zig build configurations.
         .{
             .HAVE_ASSERT_H = true,
-            .HAVE_UNISTD_H = (target.result.os.tag != .windows),
-            .HAVE_WINDOWS_H = (target.result.os.tag == .windows),
-
-            .HAVE_ATTRIBUTE_UNINITIALIZED = true,
+            .HAVE_DIRENT_H = is_unix or is_mingw,
+            .HAVE_SYS_STAT_H = true,
+            .HAVE_SYS_TYPES_H = true,
+            .HAVE_UNISTD_H = is_unix or is_mingw,
+            .HAVE_WINDOWS_H = rt.os.tag == .windows,
+
+            .HAVE_MEMFD_CREATE = is_musl or is_glibc or is_freebsd,
+            .HAVE_SECURE_GETENV = is_musl or is_glibc or is_freebsd,
+            .HAVE_SETRLIMIT = is_unix and !is_mingw,
+
+            // all compilation is using the Zig bundled c compiler
+            .HAVE_BUILTIN_ASSUME = null,
             .HAVE_BUILTIN_MUL_OVERFLOW = true,
             .HAVE_BUILTIN_UNREACHABLE = true,
+            .HAVE_ATTRIBUTE_UNINITIALIZED = true,
 
-            .SUPPORT_PCRE2_8 = codeUnitWidth == CodeUnitWidth.@"8",
-            .SUPPORT_PCRE2_16 = codeUnitWidth == CodeUnitWidth.@"16",
-            .SUPPORT_PCRE2_32 = codeUnitWidth == CodeUnitWidth.@"32",
+            .SUPPORT_PCRE2_8 = codeUnitWidth == .@"8",
+            .SUPPORT_PCRE2_16 = codeUnitWidth == .@"16",
+            .SUPPORT_PCRE2_32 = codeUnitWidth == .@"32",
             .SUPPORT_UNICODE = true,
-            .SUPPORT_JIT = jit,
+            .SUPPORT_JIT = support_jit,
+
+            // As for CMake builds, use visibilty attributes for both shared and static
+            // builds. Internal symbols should be hidden even in static builds, because
+            // the user could be statically linking PCRE2 into their own shared library.
+            .PCRE2_EXPORT = "__attribute__ ((visibility (\"default\")))",
 
-            .PCRE2_EXPORT = null,
             .PCRE2_LINK_SIZE = 2,
+            .PCRE2_PARENS_NEST_LIMIT = 250,
             .PCRE2_HEAP_LIMIT = 20000000,
+            .PCRE2_MAX_VARLOOKBEHIND = 255,
             .PCRE2_MATCH_LIMIT = 10000000,
             .PCRE2_MATCH_LIMIT_DEPTH = "MATCH_LIMIT",
-            .PCRE2_MAX_VARLOOKBEHIND = 255,
-            .NEWLINE_DEFAULT = 2,
-            .PCRE2_PARENS_NEST_LIMIT = 250,
             .PCRE2GREP_BUFSIZE = 20480,
             .PCRE2GREP_MAX_BUFSIZE = 1048576,
+            .NEWLINE_DEFAULT = 2,
         },
     );
 
     // pcre2-8/16/32 library
-
     const lib_mod = b.createModule(.{
         .target = target,
         .optimize = optimize,
+        .sanitize_c = sanitize_c,
         .link_libc = true,
     });
 
     lib_mod.addCMacro("HAVE_CONFIG_H", "");
     lib_mod.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth));
-    if (linkage == .static) {
-        lib_mod.addCMacro("PCRE2_STATIC", "");
+    switch (linkage) {
+        .static => lib_mod.addCMacro("PCRE2_STATIC", ""),
+        .dynamic => {},
+    }
+    lib_mod.addConfigHeader(config_h);
+    lib_mod.addIncludePath(pcre2_h_dir.getDirectory());
+    lib_mod.addIncludePath(b.path("src"));
+    if (sljit_include_path) |include_path| {
+        lib_mod.addIncludePath(include_path);
     }
 
-    const lib = b.addLibrary(.{
-        .name = b.fmt("pcre2-{s}", .{@tagName(codeUnitWidth)}),
-        .root_module = lib_mod,
-        .linkage = linkage,
-    });
-
-    lib.addConfigHeader(config_header);
-    lib.addIncludePath(pcre2_header_dir.getDirectory());
-    lib.addIncludePath(b.path("src"));
-
-    lib.addCSourceFile(.{
+    lib_mod.addCSourceFile(.{
         .file = b.addWriteFiles().addCopyFile(b.path("src/pcre2_chartables.c.dist"), "pcre2_chartables.c"),
+        .flags = cflags,
     });
-
-    lib.addCSourceFiles(.{
+    lib_mod.addCSourceFiles(.{
         .files = &.{
             "src/pcre2_auto_possess.c",
             "src/pcre2_chkdint.c",
@@ -110,83 +174,95 @@ pub fn build(b: *std.Build) !void {
             "src/pcre2_valid_utf.c",
             "src/pcre2_xclass.c",
         },
+        .flags = cflags,
     });
 
-    lib.installHeader(pcre2_header, "pcre2.h");
+    const lib = b.addLibrary(.{
+        .name = b.fmt("pcre2-{t}", .{codeUnitWidth}),
+        .root_module = lib_mod,
+        .linkage = linkage,
+    });
+
+    lib.installHeader(pcre2_h, "pcre2.h");
     b.installArtifact(lib);
 
     // pcre2test
-
     const pcre2test_mod = b.createModule(.{
         .target = target,
         .optimize = optimize,
+        .sanitize_c = sanitize_c,
         .link_libc = true,
     });
 
     pcre2test_mod.addCMacro("HAVE_CONFIG_H", "");
-    if (linkage == .static) {
-        pcre2test_mod.addCMacro("PCRE2_STATIC", "");
-    } else {
-        pcre2test_mod.addCMacro("PCRE2POSIX_SHARED", "");
+
+    // Note: On Windows, consumers linking against the static library should
+    // probably define PCRE2_STATIC themselves (e.g. via
+    // addCMacro("PCRE2_STATIC", "")).
+    // As far as I know, Zig's build system does not currently have a mechanism
+    // to propagate compile definitions to downstream consumers (like CMake's
+    // PUBLIC target_compile_definitions). On non-Windows targets this is a no-op.
+    switch (linkage) {
+        .static => pcre2test_mod.addCMacro("PCRE2_STATIC", ""),
+        .dynamic => pcre2test_mod.addCMacro("PCRE2POSIX_SHARED", ""),
     }
 
     const pcre2test = b.addExecutable(.{
         .name = "pcre2test",
         .root_module = pcre2test_mod,
     });
+    pcre2test_mod.addConfigHeader(config_h);
+    pcre2test_mod.addIncludePath(pcre2_h_dir.getDirectory());
+    pcre2test_mod.addIncludePath(b.path("src"));
 
-    // pcre2-posix library
+    pcre2test_mod.addCSourceFile(.{
+        .file = b.path("src/pcre2test.c"),
+        .flags = cflags,
+    });
 
+    pcre2test_mod.linkLibrary(lib);
+    b.installArtifact(pcre2test);
+
+    // pcre2-posix library
     if (codeUnitWidth == CodeUnitWidth.@"8") {
         const posixLib_mod = b.createModule(.{
             .target = target,
             .optimize = optimize,
+            .sanitize_c = sanitize_c,
             .link_libc = true,
         });
 
         posixLib_mod.addCMacro("HAVE_CONFIG_H", "");
         posixLib_mod.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth));
-        if (linkage == .static) {
-            posixLib_mod.addCMacro("PCRE2_STATIC", "");
-        } else {
-            posixLib_mod.addCMacro("PCRE2POSIX_SHARED", "");
-        }
 
-        const posixLib = b.addLibrary(.{
-            .name = "pcre2-posix",
-            .root_module = posixLib_mod,
-            .linkage = linkage,
-        });
+        switch (linkage) {
+            .static => posixLib_mod.addCMacro("PCRE2_STATIC", ""),
+            .dynamic => posixLib_mod.addCMacro("PCRE2POSIX_SHARED", ""),
+        }
 
-        posixLib.addConfigHeader(config_header);
-        posixLib.addIncludePath(pcre2_header_dir.getDirectory());
-        posixLib.addIncludePath(b.path("src"));
+        posixLib_mod.addConfigHeader(config_h);
+        posixLib_mod.addIncludePath(pcre2_h_dir.getDirectory());
+        posixLib_mod.addIncludePath(b.path("src"));
 
-        posixLib.addCSourceFiles(.{
+        posixLib_mod.addCSourceFiles(.{
             .files = &.{
                 "src/pcre2posix.c",
             },
+            .flags = cflags,
+        });
+
+        posixLib_mod.linkLibrary(lib);
+
+        const posixLib = b.addLibrary(.{
+            .name = "pcre2-posix",
+            .root_module = posixLib_mod,
+            .linkage = linkage,
         });
 
-        posixLib.linkLibrary(lib);
+        pcre2test_mod.linkLibrary(posixLib);
 
+        b.addNamedLazyPath("pcre2posix.h", b.path("src/pcre2posix.h"));
         posixLib.installHeader(b.path("src/pcre2posix.h"), "pcre2posix.h");
         b.installArtifact(posixLib);
-
-        pcre2test.linkLibrary(posixLib);
     }
-
-    // pcre2test (again)
-
-    pcre2test.addConfigHeader(config_header);
-    pcre2test.addIncludePath(pcre2_header_dir.getDirectory());
-    pcre2test.addIncludePath(b.path("src"));
-
-    pcre2test.addCSourceFile(.{
-        .file = b.path("src/pcre2test.c"),
-    });
-
-    pcre2test.linkLibrary(lib);
-
-    b.installArtifact(pcre2test);
 }
diff --git a/build.zig.zon b/build.zig.zon
new file mode 100644 (file)
index 0000000..a977415
--- /dev/null
@@ -0,0 +1,25 @@
+.{
+    .name = .pcre2,
+    .version = "10.48.0-RC1",
+
+    // Do NOT change this for new releases.
+    // DO change this if making a fork of PCRE2 which is used by any Zig clients.
+    .fingerprint = 0x914b3d63ebab9e21,
+
+    .minimum_zig_version = "0.16.0",
+    .dependencies = .{
+        .sljit = .{
+            .url = "git+https://github.com/zherczeg/sljit.git#de0259c7aaf36aa40cba8014f3fad3edde9307f9",
+            .hash = "N-V-__8AAN1hRgCbYkMHlPE4yQE6rN_yDbzE1yr8W1J6x-Gw",
+            .lazy = true,
+        },
+    },
+    .paths = .{
+        "build.zig",   "build.zig.zon",
+        "src/",        "doc/",
+        "deps/",       "HACKING",
+        "INSTALL",     "README.md",
+        "LICENCE.md",  "AUTHORS.md",
+        "SECURITY.md",
+    },
+}
index c973c7b64dc6b2714ee8a7d49315d404cd36b058..4784e052cbd9df7c12c3297c7e0c189f2a7f8432 100644 (file)
@@ -8,3 +8,8 @@ mark_as_advanced(EDITLINE_LIBRARY)
 
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(Editline DEFAULT_MSG EDITLINE_LIBRARY EDITLINE_INCLUDE_DIR)
+
+if(Editline_FOUND)
+  set(EDITLINE_LIBRARIES "${EDITLINE_LIBRARY}")
+  set(EDITLINE_INCLUDE_DIRS "${EDITLINE_INCLUDE_DIR}")
+endif()
index 399096c373db77b85a8bc3c6447fe8fff7305706..e55fbcf22fadb3e7fddb96af48765f1810e41fe9 100644 (file)
@@ -16,6 +16,11 @@ if(READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
   include(CheckSymbolExists)
   include(CMakePushCheckState)
 
+  set(first_run FALSE)
+  if(NOT DEFINED HAVE_READLINE_FUNC)
+    set(first_run TRUE)
+  endif()
+
   cmake_push_check_state(RESET)
   set(CMAKE_REQUIRED_LIBRARIES "${READLINE_LIBRARY}")
   set(CMAKE_REQUIRED_INCLUDES "${READLINE_INCLUDE_DIR}")
@@ -36,7 +41,9 @@ if(READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
         check_symbol_exists("readline" "stdio.h;readline/readline.h" HAVE_READLINE_FUNC_${lib})
 
         if(HAVE_READLINE_FUNC_${lib})
-          message(STATUS "Looking for readline - readline needs ${lib}")
+          if(first_run)
+            message(STATUS "Looking for readline - readline needs ${lib}")
+          endif()
           set(NCURSES_LIBRARY "${NCURSES_LIBRARY_${lib}}" CACHE FILEPATH "Path to the ncurses library")
           mark_as_advanced(NCURSES_LIBRARY)
           break()
@@ -50,3 +57,11 @@ endif()
 
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(Readline DEFAULT_MSG READLINE_LIBRARY READLINE_INCLUDE_DIR)
+
+if(Readline_FOUND)
+  set(READLINE_LIBRARIES "${READLINE_LIBRARY}")
+  if(DEFINED NCURSES_LIBRARY)
+    list(APPEND READLINE_LIBRARIES "${NCURSES_LIBRARY}")
+  endif()
+  set(READLINE_INCLUDE_DIRS "${READLINE_INCLUDE_DIR}")
+endif()
index ed3ae12f8da80eeb55a18d7bdcd3608a48ac3171..eeda4c004f4e13493cb5808a861df117b760b59b 100644 (file)
@@ -4,9 +4,63 @@
 # support is detected then sets "flag_var" to the appropriate flag to pass to
 # the linker (namely, --version-script or -M).
 
-function(pcre2_check_vscript have_var flag_var)
+# Helper function: try to compile a shared library with a given linker flag and
+# version script. This properly tests version script support by building a
+# shared library rather than an executable, avoiding issues with
+# executable-specific symbols (e.g. FreeBSD's crt1.o symbols, Solaris linker
+# symbols in values-Xc.o).
+function(_pcre2_try_vscript_shared_lib link_flag map_file result_var)
+  if(DEFINED ${result_var})
+    return()
+  endif()
+
+  message(STATUS "Performing Test ${result_var}")
+
+  set(${result_var} FALSE PARENT_SCOPE)
+
+  set(try_dir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeScratch/CheckVscript")
+  file(REMOVE_RECURSE "${try_dir}")
+  file(MAKE_DIRECTORY "${try_dir}")
+
+  # Write a minimal C source with exported symbols
+  file(WRITE "${try_dir}/test_vscript.c" "
+int hidethis(void) { return 0; }
+int exposethis(void) { return hidethis(); }
+")
+
+  # Write a CMakeLists.txt that builds a shared library with the version script
+  file(WRITE "${try_dir}/CMakeLists.txt" "
+cmake_minimum_required(VERSION 3.15)
+project(test_vscript C)
+add_library(test_vscript SHARED test_vscript.c)
+target_link_options(test_vscript PRIVATE \"-Wl,${link_flag},${map_file}\")
+")
+
+  try_compile(
+    compile_result
+    "${try_dir}/build" # BINARY_DIR
+    "${try_dir}" # SOURCE_DIR
+    test_vscript # Project name
+    OUTPUT_VARIABLE compile_output
+  )
+
+  if(compile_result)
+    set(${result_var} TRUE PARENT_SCOPE)
+  endif()
+
+  if(${compile_result})
+    set(${result_var} 1 CACHE INTERNAL "Test ${result_var}")
+    message(STATUS "Performing Test ${result_var} - Success")
+  else()
+    set(${result_var} "" CACHE INTERNAL "Test ${result_var}")
+    message(STATUS "Performing Test ${result_var} - Failed")
+  endif()
+endfunction()
+
+function(pcre2_check_vscript have_var flag_var no_star_var)
   set(${have_var} FALSE PARENT_SCOPE)
   set(${flag_var} "" PARENT_SCOPE)
+  set(${no_star_var} FALSE PARENT_SCOPE)
 
   if(MSVC)
     return()
@@ -18,95 +72,70 @@ function(pcre2_check_vscript have_var flag_var)
     message(STATUS "Detecting linker version script support")
   endif()
 
-  include(CheckCSourceCompiles)
-  include(CMakePushCheckState)
-
-  # The BSD file here is a workaround for the fact that check_c_source_compiles
-  # very unfortunately only supports linking executables
-  # with an entrypoint (or a static library), and yet the symbol visibility
-  # requirements for executables are understandably different on some platforms
-  # as compared to linking a shared library. On FreeBSD, linking fails if you
-  # use the linker script to hide various global symbols from /usr/lib/crt1.o.
-  #   https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=269370
-  # Basically, everyone using --version-script is actually going to be creating
-  # a shared library. It's a frustrating mismatch.
-  file(WRITE ${PROJECT_BINARY_DIR}/test-map-file.sym "PCRE2_10.00 { global: exposethis; local: *; };")
-  file(WRITE ${PROJECT_BINARY_DIR}/test-map-file-bsd.sym "PCRE2_10.00 { global: exposethis; environ; __progname; local: *; };")
-  file(WRITE ${PROJECT_BINARY_DIR}/test-map-file-broken.sym "PCRE2_10.00 { global: exposethis; local: *; };  {")
+  # Write test version script files
+  file(WRITE "${PROJECT_BINARY_DIR}/test-map-file.sym" "PCRE2_10.00 { global: exposethis; local: *; };")
+  file(WRITE "${PROJECT_BINARY_DIR}/test-map-file-broken.sym" "PCRE2_10.00 { global: exposethis; local: *; };  {")
+  file(WRITE "${PROJECT_BINARY_DIR}/test-map-file-no-star.sym" "PCRE2_10.00 { global: exposethis; local: hidethis; };")
 
   set(HAVE_VSCRIPT FALSE)
 
-  # Using an executable to check for version-script support is rather delicate,
-  # because linking in an entrypoint (main) adds extra symbols into the mix.
-  # If CMake ever added a SHARED_LIBRARY option to check_c_source_compiles, we'd
-  # use it here.
-  set(
-    test_source
-    [=[
-    int exposethis = 0, hidethis = 0;
-    int main(void) {
-      return exposethis + hidethis;
-    }
-    ]=]
-  )
-
-  cmake_push_check_state(RESET)
-  set(CMAKE_REQUIRED_QUIET TRUE)
-
-  set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script,${PROJECT_BINARY_DIR}/test-map-file.sym")
-  check_c_source_compiles("${test_source}" HAVE_VSCRIPT_GNU)
+  # Test GNU ld --version-script flag
+  _pcre2_try_vscript_shared_lib("--version-script" "${PROJECT_BINARY_DIR}/test-map-file.sym" HAVE_VSCRIPT_GNU)
 
   if(HAVE_VSCRIPT_GNU)
     set(VSCRIPT_FLAG --version-script)
     set(HAVE_VSCRIPT TRUE)
   else()
-    set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script,${PROJECT_BINARY_DIR}/test-map-file-bsd.sym")
-    check_c_source_compiles("${test_source}" HAVE_VSCRIPT_BSD)
+    # Test Sun linker -M flag
+    _pcre2_try_vscript_shared_lib("-M" "${PROJECT_BINARY_DIR}/test-map-file.sym" HAVE_VSCRIPT_SUN)
 
-    if(HAVE_VSCRIPT_BSD)
-      set(VSCRIPT_FLAG --version-script)
+    if(HAVE_VSCRIPT_SUN)
+      set(VSCRIPT_FLAG -M)
       set(HAVE_VSCRIPT TRUE)
-    else()
-      set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,-M,${PROJECT_BINARY_DIR}/test-map-file.sym")
-      check_c_source_compiles("${test_source}" HAVE_VSCRIPT_SUN)
-
-      if(HAVE_VSCRIPT_SUN)
-        set(VSCRIPT_FLAG -M)
-        set(HAVE_VSCRIPT TRUE)
-      endif()
     endif()
   endif()
 
   if(HAVE_VSCRIPT)
     # Perform the same logic as ax_check_vscript.m4, to test whether the linker
     # silently ignores (and overwrites) linker scripts it doesn't understand.
-    set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/test-map-file-broken.sym")
-    check_c_source_compiles("${test_source}" HAVE_VSCRIPT_BROKEN)
+    _pcre2_try_vscript_shared_lib("${VSCRIPT_FLAG}" "${PROJECT_BINARY_DIR}/test-map-file-broken.sym" HAVE_VSCRIPT_BROKEN)
 
     if(HAVE_VSCRIPT_BROKEN)
       set(HAVE_VSCRIPT FALSE)
-      if(first_run)
-        message(STATUS "Detecting linker version script support - no (linker overwrites unknown scripts)")
-      endif()
-    else()
-      if(first_run)
-        message(STATUS "Detecting linker version script support - yes (${VSCRIPT_FLAG})")
-      endif()
     endif()
-  else()
-    if(first_run)
+  endif()
+
+  if(first_run)
+    if(HAVE_VSCRIPT)
+      message(STATUS "Detecting linker version script support - yes (${VSCRIPT_FLAG})")
+    elseif(HAVE_VSCRIPT_BROKEN)
+      message(STATUS "Detecting linker version script support - no (linker overwrites unknown scripts)")
+    else()
       message(STATUS "Detecting linker version script support - none detected")
     endif()
   endif()
 
-  cmake_pop_check_state()
+  if(HAVE_VSCRIPT)
+    if(first_run)
+      message(STATUS "Detecting if version scripts work without wildcard")
+    endif()
+
+    # Test that the linker works without requiring a wildcard to hide platform-specific
+    # symbols (_init, _fini, etc.).
+    _pcre2_try_vscript_shared_lib("${VSCRIPT_FLAG}" "${PROJECT_BINARY_DIR}/test-map-file-no-star.sym" HAVE_VSCRIPT_NO_STAR)
+
+    if(first_run)
+      message(STATUS "Detecting if version scripts work without wildcard - ${HAVE_VSCRIPT_NO_STAR}")
+    endif()
+  endif()
 
-  file(REMOVE ${PROJECT_BINARY_DIR}/test-map-file.sym)
-  file(REMOVE ${PROJECT_BINARY_DIR}/test-map-file-bsd.sym)
-  file(REMOVE ${PROJECT_BINARY_DIR}/test-map-file-broken.sym)
+  file(REMOVE "${PROJECT_BINARY_DIR}/test-map-file.sym")
+  file(REMOVE "${PROJECT_BINARY_DIR}/test-map-file-broken.sym")
+  file(REMOVE "${PROJECT_BINARY_DIR}/test-map-file-no-star.sym")
 
   if(HAVE_VSCRIPT)
     set(${have_var} TRUE PARENT_SCOPE)
     set(${flag_var} "${VSCRIPT_FLAG}" PARENT_SCOPE)
+    set(${no_star_var} "${HAVE_VSCRIPT_NO_STAR}" PARENT_SCOPE)
   endif()
 endfunction()
index b3cc4d09f29868d3c2da300f05c3c3886466dddf..de94aeb4adc1fc53520ab0ec8fcb39bb8830c5ec 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for PCRE2 10.47.
+# Generated by GNU Autoconf 2.71 for PCRE2 10.48-RC1.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -419,6 +419,14 @@ else $as_nop
   }
 fi # as_fn_arith
 
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 # as_fn_nop
 # ---------
 # Do nothing but, unlike ":", preserve the value of $?.
@@ -618,8 +626,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='PCRE2'
 PACKAGE_TARNAME='pcre2'
-PACKAGE_VERSION='10.47'
-PACKAGE_STRING='PCRE2 10.47'
+PACKAGE_VERSION='10.48-RC1'
+PACKAGE_STRING='PCRE2 10.48-RC1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -660,6 +668,7 @@ ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+PCRE2_EXTRA_LOCAL_SYMS
 LIB_POSTFIX
 CET_CFLAGS
 WITH_GCOV_FALSE
@@ -720,11 +729,6 @@ PCRE2_DATE
 PCRE2_PRERELEASE
 PCRE2_MINOR
 PCRE2_MAJOR
-HAVE_VSCRIPT_COMPLEX_FALSE
-HAVE_VSCRIPT_COMPLEX_TRUE
-HAVE_VSCRIPT_FALSE
-HAVE_VSCRIPT_TRUE
-VSCRIPT_LDFLAGS
 HAVE_VISIBILITY
 VISIBILITY_CFLAGS
 LT_SYS_LIBRARY_PATH
@@ -736,7 +740,6 @@ DSYMUTIL
 MANIFEST_TOOL
 RANLIB
 FILECMD
-LN_S
 NM
 ac_ct_DUMPBIN
 DUMPBIN
@@ -757,6 +760,7 @@ LIBTOOL
 OBJDUMP
 DLLTOOL
 AS
+LN_S
 ac_ct_AR
 AR
 am__fastdepCC_FALSE
@@ -1476,7 +1480,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures PCRE2 10.47 to adapt to many kinds of systems.
+\`configure' configures PCRE2 10.48-RC1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1547,7 +1551,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of PCRE2 10.47:";;
+     short | recursive ) echo "Configuration of PCRE2 10.48-RC1:";;
    esac
   cat <<\_ACEOF
 
@@ -1744,7 +1748,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-PCRE2 configure 10.47
+PCRE2 configure 10.48-RC1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2137,7 +2141,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by PCRE2 $as_me 10.47, which was
+It was created by PCRE2 $as_me 10.48-RC1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3409,7 +3413,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='pcre2'
- VERSION='10.47'
+ VERSION='10.48-RC1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5345,6 +5349,20 @@ printf "%s\n" "$pcre2_cv_xlc_qhaltonmsg_fixes" >&6; }
 
 
 
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+
+# As well as LT_INIT, we use LT_OUTPUT so that PCRE2_CHECK_VSCRIPT can invoke
+# libtool to test version scripts correctly.
 case `pwd` in
   *\ * | *\    *)
     { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -6171,17 +6189,6 @@ fi
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
 printf "%s\n" "$lt_cv_nm_interface" >&6; }
 
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-printf %s "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-else
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-printf "%s\n" "no, using $LN_S" >&6; }
-fi
-
 # find the maximum length of command line arguments
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 printf %s "checking the maximum length of command line arguments... " >&6; }
@@ -13823,129 +13830,1411 @@ CC=$lt_save_CC
 # Only expand once:
 
 
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-printf %s "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-else
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-printf "%s\n" "no, using $LN_S" >&6; }
-fi
-
+: ${CONFIG_LT=./config.lt}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_LT" >&5
+printf "%s\n" "$as_me: creating $CONFIG_LT" >&6;}
+as_write_fail=0
+cat >"$CONFIG_LT" <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>"$CONFIG_LT" <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
-# Check whether --enable-largefile was given.
-if test ${enable_largefile+y}
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
 then :
-  enableval=$enable_largefile;
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else $as_nop
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
 
-if test "$enable_largefile" != no; then
 
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-printf %s "checking for special C compiler options needed for large files... " >&6; }
-if test ${ac_cv_sys_largefile_CC+y}
-then :
-  printf %s "(cached) " >&6
-else $as_nop
-  ac_cv_sys_largefile_CC=no
-     if test "$GCC" != yes; then
-       ac_save_CC=$CC
-       while :; do
-        # IRIX 6.2 and later do not support large files by default,
-        # so use the C compiler's -n32 option if that helps.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-                      && LARGE_OFF_T % 2147483647 == 1)
-                     ? 1 : -1];
-int
-main (void)
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-        if ac_fn_c_try_compile "$LINENO"
-then :
-  break
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
-        CC="$CC -n32"
-        if ac_fn_c_try_compile "$LINENO"
-then :
-  ac_cv_sys_largefile_CC=' -n32'; break
+
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
-        break
-       done
-       CC=$ac_save_CC
-       rm -f conftest.$ac_ext
-    fi
+if test ! -f "$as_myself"; then
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
 fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
-  if test "$ac_cv_sys_largefile_CC" != no; then
-    CC=$CC$ac_cv_sys_largefile_CC
-  fi
 
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if test ${ac_cv_sys_file_offset_bits+y}
-then :
-  printf %s "(cached) " >&6
-else $as_nop
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-                      && LARGE_OFF_T % 2147483647 == 1)
-                     ? 1 : -1];
-int
-main (void)
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-  ac_cv_sys_file_offset_bits=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-                      && LARGE_OFF_T % 2147483647 == 1)
-                     ? 1 : -1];
-int
-main (void)
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
 {
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  printf "%s\n" "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
 
-  ;
-  return 0;
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else $as_nop
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else $as_nop
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## --------------------------------- ##
+## Main body of "$CONFIG_LT" script. ##
+## --------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x "$CONFIG_LT"
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $0 [OPTIONS]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+PCRE2 config.lt 10.48-RC1
+configured by $0, generated by GNU Autoconf 2.71.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $#
+do
+  case $1 in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) as_fn_error $? "unrecognized option: $1
+Try '$0 --help' for more information." "$LINENO" 5 ;;
+
+    *) as_fn_error $? "unrecognized argument: $1
+Try '$0 --help' for more information." "$LINENO" 5 ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec 6>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+FILECMD \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
+AR \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5
+printf "%s\n" "$as_me: creating $ofile" >&6;}
+
+
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Assembler program.
+AS=$lt_AS
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$lt_OBJDUMP
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# A file(cmd) program that detects file types.
+FILECMD=$lt_FILECMD
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive (by configure).
+lt_ar_flags=$lt_ar_flags
+
+# Flags to create an archive.
+AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  $SED '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+as_fn_exit 0
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec 5>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec 5>>config.log
+$lt_cl_success || as_fn_exit 1
+
+
+# Check whether --enable-largefile was given.
+if test ${enable_largefile+y}
+then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+printf %s "checking for special C compiler options needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+        # IRIX 6.2 and later do not support large files by default,
+        # so use the C compiler's -n32 option if that helps.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+        if ac_fn_c_try_compile "$LINENO"
+then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+        CC="$CC -n32"
+        if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+        break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test ${ac_cv_sys_file_offset_bits+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main (void)
+{
+
+  ;
+  return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"
 then :
 
 
-
-    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking linker version script flag" >&5
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking linker version script flag" >&5
 printf %s "checking linker version script flag... " >&6; }
-if test ${ax_cv_check_vscript_flag+y}
+if test ${pcre2_cv_check_vscript_flag+y}
 then :
   printf %s "(cached) " >&6
 else $as_nop
 
-      ax_cv_check_vscript_flag=unsupported
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-  ax_check_vscript_save_flags="$LDFLAGS"
-  echo "V1 { global: show; local: *; };" > conftest.map
-  if test x = xyes
-then :
-
-    echo "{" >> conftest.map
+      pcre2_cv_check_vscript_flag=unsupported
 
-fi
-  LDFLAGS="$LDFLAGS -Wl,--version-script,conftest.map"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int show, hide;
-int
-main (void)
-{
 
-  ;
-  return 0;
-}
+  rm -rf conftest.vscript
+  mkdir conftest.vscript
+  cat > conftest.vscript/conftest.c <<_ACEOF
+int hidethis(void) { return 0; }
+int exposethis(void) { return hidethis(); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
-
-        ax_cv_check_vscript_flag=--version-script
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS="$ax_check_vscript_save_flags"
-  rm -f conftest.map
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-      if test x$ax_cv_check_vscript_flag = xunsupported
-then :
-
-        # PCRE2: Support for FreeBSD. Rather annoyingly, AC_LINK_IFELSE will
-        # only test linking executables, and in turn, on FreeBSD the main
-        # entrypoint will fail to link if you use "local: *" to hide the
-        # visibility of various shared symbols injected from /usr/lib/crt1.o.
-        # It's not at all pretty to hardcode those symbol names here, but I
-        # can't think of an obvious way to improve on this.
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-  ax_check_vscript_save_flags="$LDFLAGS"
-  echo "V1 { global: show;environ;__progname; local: *; };" > conftest.map
-  if test x = xyes
-then :
-
-    echo "{" >> conftest.map
-
-fi
-  LDFLAGS="$LDFLAGS -Wl,--version-script,conftest.map"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int show, hide;
-int
-main (void)
-{
-
-  ;
-  return 0;
-}
+  echo "PCRE2_10.00 { global: exposethis; local: *; };" > conftest.vscript/conftest.map
+  _pcre2_abs_top_builddir="$ac_pwd"
+  _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool"
+  _pcre2_vscript_cc="$CC"
+  _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS"
+  _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS"
+  _pcre2_vscript_script_flag="--version-script"
+  export _pcre2_vscript_libtool
+  export _pcre2_vscript_cc
+  export _pcre2_vscript_compile_flags
+  export _pcre2_vscript_ld_flags
+  export _pcre2_vscript_script_flag
+  if (cd conftest.vscript && \
+    $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \
+    $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1
+then :
+  pcre2_cv_check_vscript_flag=--version-script
+fi
+  unset _pcre2_vscript_libtool
+  unset _pcre2_vscript_cc
+  unset _pcre2_vscript_compile_flags
+  unset _pcre2_vscript_ld_flags
+  unset _pcre2_vscript_script_flag
+  rm -rf conftest.vscript
+
+      if test x$pcre2_cv_check_vscript_flag = xunsupported
+then :
+
+
+  rm -rf conftest.vscript
+  mkdir conftest.vscript
+  cat > conftest.vscript/conftest.c <<_ACEOF
+int hidethis(void) { return 0; }
+int exposethis(void) { return hidethis(); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"
+  echo "PCRE2_10.00 { global: exposethis; local: *; };" > conftest.vscript/conftest.map
+  _pcre2_abs_top_builddir="$ac_pwd"
+  _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool"
+  _pcre2_vscript_cc="$CC"
+  _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS"
+  _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS"
+  _pcre2_vscript_script_flag="-M"
+  export _pcre2_vscript_libtool
+  export _pcre2_vscript_cc
+  export _pcre2_vscript_compile_flags
+  export _pcre2_vscript_ld_flags
+  export _pcre2_vscript_script_flag
+  if (cd conftest.vscript && \
+    $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \
+    $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1
 then :
-
-          ax_cv_check_vscript_flag=--version-script
-
+  pcre2_cv_check_vscript_flag=-M
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS="$ax_check_vscript_save_flags"
-  rm -f conftest.map
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+  unset _pcre2_vscript_libtool
+  unset _pcre2_vscript_cc
+  unset _pcre2_vscript_compile_flags
+  unset _pcre2_vscript_ld_flags
+  unset _pcre2_vscript_script_flag
+  rm -rf conftest.vscript
 
 
 fi
-      if test x$ax_cv_check_vscript_flag = xunsupported
-then :
 
 
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-  ax_check_vscript_save_flags="$LDFLAGS"
-  echo "V1 { global: show; local: *; };" > conftest.map
-  if test x = xyes
+      if test x$pcre2_cv_check_vscript_flag != xunsupported
 then :
 
-    echo "{" >> conftest.map
-
-fi
-  LDFLAGS="$LDFLAGS -Wl,-M,conftest.map"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int show, hide;
-int
-main (void)
-{
 
-  ;
-  return 0;
-}
+  rm -rf conftest.vscript
+  mkdir conftest.vscript
+  cat > conftest.vscript/conftest.c <<_ACEOF
+int hidethis(void) { return 0; }
+int exposethis(void) { return hidethis(); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"
+  echo "PCRE2_10.00 { global: exposethis; local: *; };  {" > conftest.vscript/conftest.map
+  _pcre2_abs_top_builddir="$ac_pwd"
+  _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool"
+  _pcre2_vscript_cc="$CC"
+  _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS"
+  _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS"
+  _pcre2_vscript_script_flag="$pcre2_cv_check_vscript_flag"
+  export _pcre2_vscript_libtool
+  export _pcre2_vscript_cc
+  export _pcre2_vscript_compile_flags
+  export _pcre2_vscript_ld_flags
+  export _pcre2_vscript_script_flag
+  if (cd conftest.vscript && \
+    $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \
+    $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1
 then :
-  ax_cv_check_vscript_flag=-M
+  pcre2_cv_check_vscript_flag=unsupported
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS="$ax_check_vscript_save_flags"
-  rm -f conftest.map
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+  unset _pcre2_vscript_libtool
+  unset _pcre2_vscript_cc
+  unset _pcre2_vscript_compile_flags
+  unset _pcre2_vscript_ld_flags
+  unset _pcre2_vscript_script_flag
+  rm -rf conftest.vscript
 
 
 fi
 
-
-      if test x$ax_cv_check_vscript_flag != xunsupported
-then :
-
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-  ax_check_vscript_save_flags="$LDFLAGS"
-  echo "V1 { global: show; local: *; };" > conftest.map
-  if test xyes = xyes
-then :
-
-    echo "{" >> conftest.map
-
 fi
-  LDFLAGS="$LDFLAGS -Wl,$ax_cv_check_vscript_flag,conftest.map"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int show, hide;
-int
-main (void)
-{
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pcre2_cv_check_vscript_flag" >&5
+printf "%s\n" "$pcre2_cv_check_vscript_flag" >&6; }
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"
+    if test x$pcre2_cv_check_vscript_flag != xunsupported
 then :
-  ax_cv_check_vscript_flag=unsupported
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS="$ax_check_vscript_save_flags"
-  rm -f conftest.map
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-
-fi
-
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_vscript_flag" >&5
-printf "%s\n" "$ax_cv_check_vscript_flag" >&6; }
-
-
-    if test x$ax_cv_check_vscript_flag != xunsupported
-then :
-
-      ax_check_vscript_flag=$ax_cv_check_vscript_flag
-      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if version scripts can use complex wildcards" >&5
-printf %s "checking if version scripts can use complex wildcards... " >&6; }
-if test ${ax_cv_check_vscript_complex_wildcards+y}
+                  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if version scripts work without wildcard" >&5
+printf %s "checking if version scripts work without wildcard... " >&6; }
+if test ${pcre2_cv_check_vscript_no_star+y}
 then :
   printf %s "(cached) " >&6
 else $as_nop
 
-        ax_cv_check_vscript_complex_wildcards=no
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-  ax_check_vscript_save_flags="$LDFLAGS"
-  echo "V1 { global: sh*; local: *; };" > conftest.map
-  if test x = xyes
-then :
-
-    echo "{" >> conftest.map
-
-fi
-  LDFLAGS="$LDFLAGS -Wl,$ax_cv_check_vscript_flag,conftest.map"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int show, hide;
-int
-main (void)
-{
+        pcre2_cv_check_vscript_no_star=no
 
-  ;
-  return 0;
-}
+  rm -rf conftest.vscript
+  mkdir conftest.vscript
+  cat > conftest.vscript/conftest.c <<_ACEOF
+int hidethis(void) { return 0; }
+int exposethis(void) { return hidethis(); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"
+  echo "PCRE2_10.00 { global: exposethis; local: hidethis; };" > conftest.vscript/conftest.map
+  _pcre2_abs_top_builddir="$ac_pwd"
+  _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool"
+  _pcre2_vscript_cc="$CC"
+  _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS"
+  _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS"
+  _pcre2_vscript_script_flag="$pcre2_cv_check_vscript_flag"
+  export _pcre2_vscript_libtool
+  export _pcre2_vscript_cc
+  export _pcre2_vscript_compile_flags
+  export _pcre2_vscript_ld_flags
+  export _pcre2_vscript_script_flag
+  if (cd conftest.vscript && \
+    $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \
+    $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1
 then :
-
-        ax_cv_check_vscript_complex_wildcards=yes
+  pcre2_cv_check_vscript_no_star=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS="$ax_check_vscript_save_flags"
-  rm -f conftest.map
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+  unset _pcre2_vscript_libtool
+  unset _pcre2_vscript_cc
+  unset _pcre2_vscript_compile_flags
+  unset _pcre2_vscript_ld_flags
+  unset _pcre2_vscript_script_flag
+  rm -rf conftest.vscript
 
 
 fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_vscript_complex_wildcards" >&5
-printf "%s\n" "$ax_cv_check_vscript_complex_wildcards" >&6; }
-      ax_check_vscript_complex_wildcards="$ax_cv_check_vscript_complex_wildcards"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pcre2_cv_check_vscript_no_star" >&5
+printf "%s\n" "$pcre2_cv_check_vscript_no_star" >&6; }
+
+      pcre2_check_vscript_flag=$pcre2_cv_check_vscript_flag
+      pcre2_check_vscript_no_star=$pcre2_cv_check_vscript_no_star
 
 else $as_nop
 
-      ax_check_vscript_flag=
-      ax_check_vscript_complex_wildcards=no
+      pcre2_check_vscript_flag=
+      pcre2_check_vscript_no_star=no
 
 fi
 
@@ -14462,38 +15654,13 @@ printf %s "checking linker version script flag... " >&6; }
     { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
 printf "%s\n" "disabled" >&6; }
 
-    ax_check_vscript_flag=
-    ax_check_vscript_complex_wildcards=no
-
-fi
-
-  if test x$ax_check_vscript_flag != x
-then :
-
-    VSCRIPT_LDFLAGS="-Wl,$ax_check_vscript_flag"
-
-
-fi
-
-   if test x$ax_check_vscript_flag != x; then
-  HAVE_VSCRIPT_TRUE=
-  HAVE_VSCRIPT_FALSE='#'
-else
-  HAVE_VSCRIPT_TRUE='#'
-  HAVE_VSCRIPT_FALSE=
-fi
+    pcre2_check_vscript_flag=
+    pcre2_check_vscript_no_star=no
 
-   if test x$ax_check_vscript_complex_wildcards = xyes; then
-  HAVE_VSCRIPT_COMPLEX_TRUE=
-  HAVE_VSCRIPT_COMPLEX_FALSE='#'
-else
-  HAVE_VSCRIPT_COMPLEX_TRUE='#'
-  HAVE_VSCRIPT_COMPLEX_FALSE=
 fi
 
 
 
-
 # Check for Clang __attribute__((uninitialized)) feature
 
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__((uninitialized))" >&5
@@ -14681,9 +15848,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Versioning
 
 PCRE2_MAJOR="10"
-PCRE2_MINOR="47"
-PCRE2_PRERELEASE=""
-PCRE2_DATE="2025-10-21"
+PCRE2_MINOR="48"
+PCRE2_PRERELEASE="-RC1"
+PCRE2_DATE="2026-08-27"
 
 if test "$PCRE2_MINOR" = "08" -o "$PCRE2_MINOR" = "09"
 then
@@ -15563,6 +16730,12 @@ if test "x$ac_cv_func_secure_getenv" = xyes
 then :
   printf "%s\n" "#define HAVE_SECURE_GETENV 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "setrlimit" "ac_cv_func_setrlimit"
+if test "x$ac_cv_func_setrlimit" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETRLIMIT 1" >>confdefs.h
+
 fi
 
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for realpath" >&5
@@ -17214,31 +18387,31 @@ esac
 # are m4 variables, assigned above.
 
 EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \
-  $NO_UNDEFINED -version-info 15:0:15"
+  $NO_UNDEFINED -version-info 16:0:16"
 
 EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \
-  $NO_UNDEFINED -version-info 15:0:15"
+  $NO_UNDEFINED -version-info 16:0:16"
 
 EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \
-  $NO_UNDEFINED -version-info 15:0:15"
+  $NO_UNDEFINED -version-info 16:0:16"
 
 EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \
-  $NO_UNDEFINED -version-info 3:7:0"
+  $NO_UNDEFINED -version-info 3:8:0"
 
 # Append each library's version script, if the platform supports it.
 
-if test x$ax_check_vscript_flag != x ; then
+if test x$pcre2_check_vscript_flag != x ; then
   EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-8.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-8.sym"
 
   EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-16.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-16.sym"
 
   EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-32.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-32.sym"
 
   EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-posix.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-posix.sym"
 fi
 
 
@@ -17768,9 +18941,18 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Pass empty LIB_POSTFIX to *.pc files and pcre2-config here.
 
 
+# Set the extra "local: *" symbol section conditionally for Solaris (effectively).
+
+if test x$pcre2_check_vscript_flag != x && test x$pcre2_check_vscript_no_star = xno; then
+  PCRE2_EXTRA_LOCAL_SYMS="  local: *;"
+else
+  PCRE2_EXTRA_LOCAL_SYMS=""
+fi
+
+
 # Produce these files, in addition to config.h.
 
-ac_config_files="$ac_config_files Makefile libpcre2-8.pc libpcre2-16.pc libpcre2-32.pc libpcre2-posix.pc pcre2-config src/pcre2.h"
+ac_config_files="$ac_config_files Makefile libpcre2-8.pc libpcre2-16.pc libpcre2-32.pc libpcre2-posix.pc pcre2-config src/pcre2.h src/libpcre2-8.sym src/libpcre2-16.sym src/libpcre2-32.sym src/libpcre2-posix.sym"
 
 
 # Make the generated script files executable.
@@ -17928,14 +19110,6 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_VSCRIPT_TRUE}" && test -z "${HAVE_VSCRIPT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_VSCRIPT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_VSCRIPT_COMPLEX_TRUE}" && test -z "${HAVE_VSCRIPT_COMPLEX_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_VSCRIPT_COMPLEX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${WITH_PCRE2_8_TRUE}" && test -z "${WITH_PCRE2_8_FALSE}"; then
   as_fn_error $? "conditional \"WITH_PCRE2_8\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -18374,7 +19548,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by PCRE2 $as_me 10.47, which was
+This file was extended by PCRE2 $as_me 10.48-RC1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18442,7 +19616,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-PCRE2 config.status 10.47
+PCRE2 config.status 10.48-RC1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
@@ -18847,6 +20021,7 @@ fi
     RM='$RM'
     ofile='$ofile'
 
+ac_aux_dir='$ac_aux_dir'
 
 
 
     "libpcre2-posix.pc") CONFIG_FILES="$CONFIG_FILES libpcre2-posix.pc" ;;
     "pcre2-config") CONFIG_FILES="$CONFIG_FILES pcre2-config" ;;
     "src/pcre2.h") CONFIG_FILES="$CONFIG_FILES src/pcre2.h" ;;
+    "src/libpcre2-8.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-8.sym" ;;
+    "src/libpcre2-16.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-16.sym" ;;
+    "src/libpcre2-32.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-32.sym" ;;
+    "src/libpcre2-posix.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-posix.sym" ;;
     "script-chmod") CONFIG_COMMANDS="$CONFIG_COMMANDS script-chmod" ;;
     "delete-old-chartables") CONFIG_COMMANDS="$CONFIG_COMMANDS delete-old-chartables" ;;
 
@@ -20176,7 +21355,7 @@ fi
 with_symbol_versioning=n/a
 if test x$want_symvers != xyes; then
   with_symbol_versioning=no
-elif test x$ax_check_vscript_flag != x; then
+elif test x$pcre2_check_vscript_flag != x; then
   with_symbol_versioning=yes
 fi
 
index ff44d77c3a0c24255fd1a871a77567b004cd3c39..8592c2ea56eaf9272a103bd98f0b2c424784ba32 100644 (file)
@@ -9,15 +9,15 @@ dnl The PCRE2_PRERELEASE feature is for identifying release candidates. It might
 dnl be defined as -RC2, for example. For real releases, it should be empty.
 
 m4_define(pcre2_major, [10])
-m4_define(pcre2_minor, [47])
-m4_define(pcre2_prerelease, [])
-m4_define(pcre2_date, [2025-10-21])
+m4_define(pcre2_minor, [48])
+m4_define(pcre2_prerelease, [-RC1])
+m4_define(pcre2_date, [2026-08-27])
 
 # Libtool shared library interface versions (current:revision:age)
-m4_define(libpcre2_8_version,     [15:0:15])
-m4_define(libpcre2_16_version,    [15:0:15])
-m4_define(libpcre2_32_version,    [15:0:15])
-m4_define(libpcre2_posix_version, [3:7:0])
+m4_define(libpcre2_8_version,     [16:0:16])
+m4_define(libpcre2_16_version,    [16:0:16])
+m4_define(libpcre2_32_version,    [16:0:16])
+m4_define(libpcre2_posix_version, [3:8:0])
 
 # NOTE: The CMakeLists.txt file searches for the above variables in the first
 # 50 lines of this file. Please update that if the variables above are moved.
@@ -76,9 +76,13 @@ AC_TYPE_INT64_T
 PCRE2_ZOS_FIXES
 
 AC_PROG_INSTALL
-LT_INIT([win32-dll])
 AC_PROG_LN_S
 
+# As well as LT_INIT, we use LT_OUTPUT so that PCRE2_CHECK_VSCRIPT can invoke
+# libtool to test version scripts correctly.
+LT_INIT([win32-dll])
+LT_OUTPUT
+
 AC_SYS_LARGEFILE
 
 # Check for GCC visibility feature
@@ -87,7 +91,7 @@ PCRE2_VISIBILITY
 
 # Check for the availability of -Wl,--version-script (or -Wl,-M on Solaris)
 
-AX_CHECK_VSCRIPT
+PCRE2_CHECK_VSCRIPT
 
 # Check for Clang __attribute__((uninitialized)) feature
 
@@ -623,7 +627,7 @@ AC_TYPE_SIZE_T
 
 # Checks for library functions.
 
-AC_CHECK_FUNCS(memfd_create mkostemp secure_getenv)
+AC_CHECK_FUNCS(memfd_create mkostemp secure_getenv setrlimit)
 AC_MSG_CHECKING([for realpath])
 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <stdlib.h>
@@ -1043,18 +1047,18 @@ EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \
 
 # Append each library's version script, if the platform supports it.
 
-if test x$ax_check_vscript_flag != x ; then
+if test x$pcre2_check_vscript_flag != x ; then
   EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-8.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-8.sym"
 
   EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-16.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-16.sym"
 
   EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-32.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-32.sym"
 
   EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \
-    -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-posix.sym"
+    -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-posix.sym"
 fi
 
 AC_SUBST(EXTRA_LIBPCRE2_8_LDFLAGS)
@@ -1198,6 +1202,15 @@ AC_LANG_POP([C])
 # Pass empty LIB_POSTFIX to *.pc files and pcre2-config here.
 AC_SUBST(LIB_POSTFIX)
 
+# Set the extra "local: *" symbol section conditionally for Solaris (effectively).
+
+if test x$pcre2_check_vscript_flag != x && test x$pcre2_check_vscript_no_star = xno; then
+  PCRE2_EXTRA_LOCAL_SYMS="  local: *;"
+else
+  PCRE2_EXTRA_LOCAL_SYMS=""
+fi
+AC_SUBST([PCRE2_EXTRA_LOCAL_SYMS])
+
 # Produce these files, in addition to config.h.
 
 AC_CONFIG_FILES(
@@ -1208,6 +1221,10 @@ AC_CONFIG_FILES(
        libpcre2-posix.pc
        pcre2-config
        src/pcre2.h
+       src/libpcre2-8.sym
+       src/libpcre2-16.sym
+       src/libpcre2-32.sym
+       src/libpcre2-posix.sym
 )
 
 # Make the generated script files executable.
@@ -1250,7 +1267,7 @@ fi
 with_symbol_versioning=n/a
 if test x$want_symvers != xyes; then
   with_symbol_versioning=no
-elif test x$ax_check_vscript_flag != x; then
+elif test x$pcre2_check_vscript_flag != x; then
   with_symbol_versioning=yes
 fi
 
index 36d301434a4fa63367d3489066052768342619a3..62f7371125b337db07c1ee3baaea4995bf9d7abc 100644 (file)
@@ -90,6 +90,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
 #ifdef PROT_MAX
        prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC);
 #endif
+#ifdef PROT_MPROTECT
+       prot |= PROT_MPROTECT(PROT_EXEC);
+#endif
 
        size += sizeof(sljit_uw);
        ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
index 993f4fe2fa1686a8397206b503b5ed3d5018dc3d..d43e8ae2aac3192421dab17416054acac066f5c9 100644 (file)
@@ -133,7 +133,7 @@ extern "C" {
       nonzero value - FPU is present.
 */
 
-/* For further configurations, see the beginning of sljitConfigInternal.h */
+/* For further configurations, see sljitConfigCPU.h and sljitConfigInternal.h */
 
 #ifdef __cplusplus
 } /* extern "C" */
index dcf88efbd43730ffbda5960a38d0671857505513..a0d8d44c93ffb61af56d75539c70cdc1be683939 100644 (file)
@@ -46,6 +46,7 @@
 /* #define SLJIT_CONFIG_RISCV_64 1 */
 /* #define SLJIT_CONFIG_S390X 1 */
 /* #define SLJIT_CONFIG_LOONGARCH_64 */
+/* #define SLJIT_CONFIG_ALPHA_64 1 */
 
 /* #define SLJIT_CONFIG_AUTO 1 */
 /* #define SLJIT_CONFIG_UNSUPPORTED 1 */
@@ -68,6 +69,7 @@
        + (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \
        + (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \
        + (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \
+       + (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \
        + (defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) \
        + (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) >= 2
 #error "Multiple architectures are selected"
@@ -87,6 +89,7 @@
        && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \
        && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \
        && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \
+       && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \
        && !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) \
        && !(defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO)
 #if defined SLJIT_CONFIG_AUTO && !SLJIT_CONFIG_AUTO
 #define SLJIT_CONFIG_LOONGARCH_64 1
 #elif defined(__s390x__)
 #define SLJIT_CONFIG_S390X 1
+#elif defined(__alpha__)
+#define SLJIT_CONFIG_ALPHA_64 1
 #else
 /* Unsupported architecture */
 #define SLJIT_CONFIG_UNSUPPORTED 1
 #define SLJIT_CONFIG_RISCV 1
 #elif (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64)
 #define SLJIT_CONFIG_LOONGARCH 1
+#elif (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64)
+#define SLJIT_CONFIG_ALPHA 1
+#endif
+
+/*************************/
+/* Endianness detection. */
+/*************************/
+
+#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN)
+
+#if defined(SLJIT_CONFIG_ARM) && SLJIT_CONFIG_ARM
+
+#ifdef __ARM_BIG_ENDIAN
+#define SLJIT_BIG_ENDIAN 1
+#else
+#define SLJIT_LITTLE_ENDIAN 1
+#endif
+
+#elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC)
+
+#ifdef __LITTLE_ENDIAN__
+#define SLJIT_LITTLE_ENDIAN 1
+#else
+#define SLJIT_BIG_ENDIAN 1
+#endif
+
+#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
+
+#ifdef __MIPSEL__
+#define SLJIT_LITTLE_ENDIAN 1
+#else
+#define SLJIT_BIG_ENDIAN 1
+#endif
+
+#ifndef SLJIT_MIPS_REV
+
+/* Auto detecting mips revision. */
+#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6)
+#define SLJIT_MIPS_REV 6
+#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1
+#define SLJIT_MIPS_REV __mips_isa_rev
+#elif defined(__clang__) \
+       && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600))
+/* clang either forgets to define (clang-7) __mips_isa_rev at all
+ * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+)
+ * and -march=p5600 (MIPS32 R5).
+ * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5
+ * (should be set to N exactly) so we cannot rely on this too.
+ */
+#define SLJIT_MIPS_REV 1
+#endif
+
+#endif /* !SLJIT_MIPS_REV */
+
+#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
+
+#define SLJIT_BIG_ENDIAN 1
+
+#else
+
+#define SLJIT_LITTLE_ENDIAN 1
+
+#endif
+
+#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */
+
+#if (defined(SLJIT_CONFIG_ARM_64) && SLJIT_CONFIG_ARM_64) \
+       && (defined(SLJIT_BIG_ENDIAN) && SLJIT_BIG_ENDIAN)
+
+#undef SLJIT_CONFIG_ARM_64
+#define SLJIT_CONFIG_UNSUPPORTED 1
+
 #endif
 
 #endif /* SLJIT_CONFIG_CPU_H_ */
index c052434d2f581603c3f3a9bf875b43cd7ae0c63e..9c222349c539c4f73b0eebbb0822405c73581c43 100644 (file)
      SLJIT_UPPER_BITS_ZERO_EXTENDED : 32 bit operations clears the upper bits of destination registers
      SLJIT_UPPER_BITS_SIGN_EXTENDED : 32 bit operations replicates the sign bit in the upper bits of destination registers
      SLJIT_UPPER_BITS_PRESERVED : 32 bit operations preserves the upper bits of destination registers
+     SLJIT_SUBC_SETS_SIGNED : SLJIT_SUBC[32] operation always sets the signed result, so setting
+                              the following status flags after a subtract with carry operation is valid:
+                              sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_LESS)
+                              sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_GREATER)
+     SLJIT_SHARED_COMPARISON_FLAGS: the cpu has different instructions for signed and unsigned
+                                    comparisons, which sets the same status flags, so passing SLJIT_LESS
+                                    or SLJIT_SIG_LESS as an argument has the same effect, and this is true
+                                    for all other signed/unsigned comparison type pairs
 
    Constants:
      SLJIT_NUMBER_OF_REGISTERS : number of available registers
      SLJIT_TMP_DEST_REG : a temporary register for results, see the rules below
      SLJIT_TMP_DEST_FREG : a temporary register for float results, see the rules below
      SLJIT_TMP_DEST_VREG : a temporary register for vector results, see the rules below
-     SLJIT_TMP_OPT_REG : a temporary register which might not be defined, see the rules below
+     SLJIT_TMP_OPT_REG : an optional temporary register, see the rules below
+     SLJIT_TMP_FLAG_REG : an optional temporary register for storing the value of a flag
      SLJIT_FUNC : calling convention attribute for both calling JIT from C and C calling back from JIT
      SLJIT_W(number) : defining 64 bit constants on 64 bit architectures (platform independent helper)
      SLJIT_F64_SECOND(reg) : provides the register index of the second 32 bit part of a 64 bit
                              floating point register when SLJIT_HAS_F64_AS_F32_PAIR returns non-zero
 
    Temporary register rules (e.g. SLJIT_TMP_DEST_REG / SLJIT_TMP_OPT_REG):
-     Sljit tries to emit instructions without using any temporary registers whenever it is possible.
-     When a single temporary register is needed, it is always the "OPT" register. When two temporary
-     registers are needed, both the "DEST" and "OPT" are used. The x86-32 does not define an "OPT"
-     register, and handles all cases without an "OPT" register which requires an "OPT" register
-     on other architectures.
+     The sljit compiler avoids using temporary registers, but certain instruction
+     forms cannot be generated without them. The number of temporary registers
+     reserved by the compiler depends on the target architecture. An SLJIT_TMP_*
+     name is assigned to some of these registers, which represents their
+     SLJIT_TMP_R(i) index. When such register is optional, it might not be
+     defined on all architectures. For example, the x86-32 code generator does
+     not use any optional temporary registers.
 */
 
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
 #include <stdlib.h>
 #endif
 
+#ifdef __APPLE__
+#include <AvailabilityMacros.h>
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
+#include <libkern/OSCacheControl.h>
+#endif
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -242,10 +260,6 @@ extern "C" {
 /* Instruction cache flush. */
 /****************************/
 
-#ifdef __APPLE__
-#include <AvailabilityMacros.h>
-#endif
-
 /*
  * TODO:
  *
@@ -291,7 +305,6 @@ extern "C" {
 /* Supported by all macs since Mac OS 10.5.
    However, it does not work on non-jailbroken iOS devices,
    although the compilation is successful. */
-#include <libkern/OSCacheControl.h>
 #define SLJIT_CACHE_FLUSH(from, to) \
        sys_icache_invalidate((void*)(from), (size_t)((char*)(to) - (char*)(from)))
 
@@ -359,7 +372,8 @@ typedef int sljit_sw;
        && !(defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) \
        && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \
        && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \
-       && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64)
+       && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \
+       && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64)
 #define SLJIT_32BIT_ARCHITECTURE 1
 #define SLJIT_WORD_SHIFT 2
 typedef unsigned int sljit_uw;
@@ -428,6 +442,12 @@ typedef double sljit_f64;
 #define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT
 #define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT
 #define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO
+#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA)
+/* CVTTQ/SVC uses software completion; sljit_emit_fop1_conv_sw_from_f64
+   emits FCMPLT/CMPTEQ + CMOVNE/CMOVEQ fixups to enforce saturation. */
+#define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT
+#define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT
+#define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO
 #else
 #error "Result for float to integer conversion is not defined"
 #endif
@@ -451,55 +471,6 @@ typedef double sljit_f64;
 /* Endianness detection. */
 /*************************/
 
-#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN)
-
-/* These macros are mostly useful for the applications. */
-#if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC)
-
-#ifdef __LITTLE_ENDIAN__
-#define SLJIT_LITTLE_ENDIAN 1
-#else
-#define SLJIT_BIG_ENDIAN 1
-#endif
-
-#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
-
-#ifdef __MIPSEL__
-#define SLJIT_LITTLE_ENDIAN 1
-#else
-#define SLJIT_BIG_ENDIAN 1
-#endif
-
-#ifndef SLJIT_MIPS_REV
-
-/* Auto detecting mips revision. */
-#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6)
-#define SLJIT_MIPS_REV 6
-#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1
-#define SLJIT_MIPS_REV __mips_isa_rev
-#elif defined(__clang__) \
-       && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600))
-/* clang either forgets to define (clang-7) __mips_isa_rev at all
- * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+)
- * and -march=p5600 (MIPS32 R5).
- * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5
- * (should be set to N exactly) so we cannot rely on this too.
- */
-#define SLJIT_MIPS_REV 1
-#endif
-
-#endif /* !SLJIT_MIPS_REV */
-
-#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
-
-#define SLJIT_BIG_ENDIAN 1
-
-#else
-#define SLJIT_LITTLE_ENDIAN 1
-#endif
-
-#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */
-
 /* Sanity check. */
 #if (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN) && (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
 #error "Exactly one endianness must be selected"
@@ -616,6 +587,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_MASKED_SHIFT32 1
 #define SLJIT_UPPER_BITS_IGNORED 1
 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1
+#define SLJIT_SUBC_SETS_SIGNED 1
 
 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
 
@@ -640,6 +612,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_MASKED_SHIFT32 1
 #define SLJIT_UPPER_BITS_IGNORED 1
 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1
+#define SLJIT_SUBC_SETS_SIGNED 1
 
 #elif (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32)
 
@@ -653,6 +626,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0
 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
 #define SLJIT_LOCALS_OFFSET_BASE 0
+#define SLJIT_SUBC_SETS_SIGNED 1
 
 #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)
 
@@ -670,6 +644,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_MASKED_SHIFT32 1
 #define SLJIT_UPPER_BITS_IGNORED 1
 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1
+#define SLJIT_SUBC_SETS_SIGNED 1
 
 #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC)
 
@@ -691,6 +666,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_LOCALS_OFFSET_BASE (3 * (sljit_s32)sizeof(sljit_sw))
 #endif /* SLJIT_CONFIG_PPC_64 || _AIX */
 #define SLJIT_UPPER_BITS_IGNORED 1
+#define SLJIT_SHARED_COMPARISON_FLAGS 1
 
 #elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
 
@@ -709,10 +685,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 3
 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0
+#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3
 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
 #define SLJIT_MASKED_SHIFT 1
 #define SLJIT_MASKED_SHIFT32 1
 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1
+#define SLJIT_SHARED_COMPARISON_FLAGS 1
 
 #elif (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV)
 
@@ -728,6 +706,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_NUMBER_OF_TEMPORARY_VECTOR_REGISTERS 2
 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0
+#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3
 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
 #define SLJIT_TMP_DEST_VREG SLJIT_TMP_VR0
 #define SLJIT_LOCALS_OFFSET_BASE 0
@@ -735,6 +714,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_MASKED_SHIFT32 1
 #define SLJIT_UPPER_BITS_IGNORED 1
 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1
+#define SLJIT_SHARED_COMPARISON_FLAGS 1
 
 #elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
 
@@ -772,6 +752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_MASKED_SHIFT 1
 #define SLJIT_UPPER_BITS_IGNORED 1
 #define SLJIT_UPPER_BITS_PRESERVED 1
+#define SLJIT_SHARED_COMPARISON_FLAGS 1
 
 #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH)
 
@@ -783,11 +764,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
 #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0
+#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3
 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
 #define SLJIT_LOCALS_OFFSET_BASE 0
 #define SLJIT_MASKED_SHIFT 1
 #define SLJIT_MASKED_SHIFT32 1
 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1
+#define SLJIT_SHARED_COMPARISON_FLAGS 1
+
+#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA)
+
+/* Alpha has 32 general registers (r31 hardwired zero) and 32 float registers
+   (f31 hardwired zero). Reserved: r31 (zero), r30 (sp), r29 (gp, unused by the
+   JIT). Backend temporaries: r24, r25, r26 (ra), r27 (pv), r28 (at). Exposed:
+   17 scratch (r0-r8, r16-r23) + 7 callee-saved (r9-r15). */
+#define SLJIT_NUMBER_OF_REGISTERS 24
+#define SLJIT_NUMBER_OF_SAVED_REGISTERS 7
+#define SLJIT_NUMBER_OF_TEMPORARY_REGISTERS 5
+#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 28
+#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8
+#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
+#define SLJIT_TMP_OPT_REG SLJIT_TMP_R0
+#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
+/* One word is reserved at the bottom of the frame: CPUs without the FIX
+   extension have no register to register move between the integer and float
+   register files, so values are bounced through this slot instead. */
+#define SLJIT_LOCALS_OFFSET_BASE ((sljit_s32)sizeof(sljit_sw))
+#define SLJIT_MASKED_SHIFT 1
+#define SLJIT_MASKED_SHIFT32 1
+#define SLJIT_UPPER_BITS_SIGN_EXTENDED 1
+#define SLJIT_SHARED_COMPARISON_FLAGS 1
 
 #elif (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
 
@@ -894,7 +902,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
        || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \
        || (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) \
        || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \
-       || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH)
+       || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) \
+       || (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA)
 #define SLJIT_HAS_STATUS_FLAGS_STATE 1
 #endif
 
index 633e794b3bf39ec90b732c2840d6df892e71aa80..e8c77f8564b6be824e1b47c939422c41d3c7d2e9 100644 (file)
@@ -2484,7 +2484,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile
                        CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
                else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) {
                        CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY);
-                       compiler->last_flags = 0;
+                       compiler->last_flags &= ~SLJIT_SET_Z;
                } else
                        CHECK_ARGUMENT((type & 0xfe) == (compiler->last_flags & 0xff)
                                || CHECK_UNORDERED(type, compiler->last_flags));
@@ -2746,7 +2746,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_select(struct sljit_compi
                        CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
                else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) {
                        CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY);
-                       compiler->last_flags = 0;
+                       compiler->last_flags &= ~SLJIT_SET_Z;
                } else
                        CHECK_ARGUMENT((cond & 0xfe) == (compiler->last_flags & 0xff)
                                || CHECK_UNORDERED(cond, compiler->last_flags));
@@ -3495,6 +3495,8 @@ static void sljit_reset_read_only_buffers(struct sljit_read_only_buffer *buffers
 #      include "sljitNativeS390X.c"
 #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH)
 #      include "sljitNativeLOONGARCH_64.c"
+#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA)
+#      include "sljitNativeALPHA_64.c"
 #endif /* SLJIT_CONFIG_X86 */
 
 #include "sljitSerialize.c"
@@ -3737,7 +3739,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem_update(struct sljit_compiler *
 #endif /* !SLJIT_CONFIG_ARM && !SLJIT_CONFIG_PPC */
 
 #if !(defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \
-       && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
+       && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \
+       && !(defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA)
 
 SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type,
        sljit_s32 freg,
@@ -3749,7 +3752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil
        return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw);
 }
 
-#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS */
+#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS && !SLJIT_CONFIG_ALPHA */
 
 #if !(defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \
        && !(defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC)
index c5bf1287c39f6cedeb1944f7271340505a5c1c43..019ad60ea433f592a260082ee9ddb5bdb5a00bab 100644 (file)
@@ -1167,7 +1167,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c
 #define SLJIT_OP0_BASE                 0
 
 /* Flags: - (does not modify flags)
-   Note: breakpoint instruction is not supported by all architectures (e.g. ppc)
+   Triggers a trap that could be intercepted by a debugger
+   Note: might not be supported by all architectures,
          It falls back to SLJIT_NOP in those cases. */
 #define SLJIT_BREAKPOINT               (SLJIT_OP0_BASE + 0)
 /* Flags: - (does not modify flags)
@@ -1761,7 +1762,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj
 #define SLJIT_SET_OVERFLOW             SLJIT_SET(SLJIT_OVERFLOW)
 #define SLJIT_NOT_OVERFLOW             11
 
-/* Unlike other flags, sljit_emit_jump may destroy the carry flag. */
+/* Unlike other comparison types, sljit_emit_jump may destroy zero flag
+   when carry flag is specified (powerpc limitation). Furthermore,
+   SLJIT_CARRY represents that the first operand is unsigned less than
+   the second operand after an SLJIT_SUB / SLJIT_SUBC operation. */
 #define SLJIT_CARRY                    12
 #define SLJIT_SET_CARRY                        SLJIT_SET(SLJIT_CARRY)
 #define SLJIT_NOT_CARRY                        13
@@ -2023,11 +2027,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
 
 /* The following flags are used by sljit_emit_mem() and sljit_emit_fmem(). */
 
-/* Load or stora data from an unaligned (byte aligned) address. */
+/* Load or store data from an unaligned (byte aligned) address. */
 #define SLJIT_MEM_UNALIGNED    0x000400
-/* Load or stora data from a 16 bit aligned address. */
+/* Load or store data from a 16 bit aligned address. */
 #define SLJIT_MEM_ALIGNED_16   0x000800
-/* Load or stora data from a 32 bit aligned address. */
+/* Load or store data from a 32 bit aligned address. */
 #define SLJIT_MEM_ALIGNED_32   0x001000
 
 /* The following flags are used by sljit_emit_mem_update(),
@@ -2732,8 +2736,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st
 /* All JIT related code should be placed in the same context (library, binary, etc.). */
 
 /* Get the entry address of a given function (signed, unsigned result). */
-#define SLJIT_FUNC_ADDR(func_name)     (*(sljit_sw*)(void*)func_name)
-#define SLJIT_FUNC_UADDR(func_name)    (*(sljit_uw*)(void*)func_name)
+#define SLJIT_FUNC_ADDR(func_name)     (*(sljit_sw*)(sljit_uw)func_name)
+#define SLJIT_FUNC_UADDR(func_name)    (*(sljit_uw*)(sljit_uw)func_name)
 
 /* For powerpc64, the function pointers point to a context descriptor. */
 struct sljit_function_context {
@@ -2745,7 +2749,7 @@ struct sljit_function_context {
 /* Fill the context arguments using the addr and the function.
    If func_ptr is NULL, it will not be set to the address of context
    If addr is NULL, the function address also comes from the func pointer. */
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func);
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void));
 
 #endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */
 
index 16ef39940c5a41b9267e0ec96fc07c7d127bfc3d..ef2762f398c28d59c58ff14308ea1cbe2552ed87 100644 (file)
@@ -2650,7 +2650,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= 0x1f;
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index dabbd3b079212a0319ec85cf12b9434ec8e82e4a..06d94a96aacf54fcc7f7aa8996c478e39f4a6c52 100644 (file)
@@ -70,7 +70,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
 #define VM(vm) ((sljit_ins)freg_map[vm] << 16)
 
 /* --------------------------------------------------------------------- */
-/*  Instruction forms                                                     */
+/*  Instruction forms                                                    */
 /* --------------------------------------------------------------------- */
 
 #define ADC            0x9a000000
@@ -157,7 +157,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
 #define SDIV           0x9ac00c00
 #define SMADDL         0x9b200000
 #define SMOV           0x0e002c00
-#define SMULH          0x9b403c00
+#define SMULH          0x9b407c00
 #define SSHLL          0x0f00a400
 #define ST1            0x0c007000
 #define ST1_s          0x0d000000
@@ -173,7 +173,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
 #define STUR_FI                0x3c000000
 #define STURBI         0x38000000
 #define STXR           0xc8007c00
-#define STXRB          0x8007c00
+#define STXRB          0x08007c00
 #define STXRH          0x48007c00
 #define SUB            0xcb000000
 #define SUBI           0xd1000000
@@ -184,7 +184,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
 #define UCVTF          0x9e630000
 #define UDIV           0x9ac00800
 #define UMOV           0x0e003c00
-#define UMULH          0x9bc03c00
+#define UMULH          0x9bc07c00
 #define USHLL          0x2f00a400
 #define USHR           0x2f000400
 #define USRA           0x2f001400
@@ -1893,7 +1893,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= 0x3f;
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index eab9ec1ff0506308c9596a08e88ebc7df6842ef6..66084571c6f9df259691a45798192ba25713afa1 100644 (file)
@@ -2217,7 +2217,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= 0x1f;
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index 13319669a55fc7423e444818fd394bfcb1604823..83e6e297c20a80649cb1489b935943b76de098bd 100644 (file)
@@ -70,9 +70,9 @@ LoongArch instructions are 32 bits wide, belonging to 9 basic instruction format
 | 1RI21        | Opcode + I21L + Rj + I21H   |
 | I26          | Opcode + I26L + I26H        |
 
-Rd is the destination register operand, while Rj, Rk and Ra (“a” stands for “additional”) are the source register operands.
+Rd is the destination register operand, while Rj, Rk and Ra ("a" stands for "additional") are the source register operands.
 I8/I12/I14/I16/I21/I26 are immediate operands of respective width. The longer I21 and I26 are stored in separate higher and
-lower parts in the instruction word, denoted by the “L” and “H” suffixes. */
+lower parts in the instruction word, denoted by the "L" and "H" suffixes. */
 
 #define RD(rd) ((sljit_ins)reg_map[rd])
 #define RJ(rj) ((sljit_ins)reg_map[rj] << 5)
@@ -2191,7 +2191,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1);
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index 771abfec24744174bf802c721e8d44bcb252a450..96fa342f94a015e3fac3af13f2949f394a14bedc 100644 (file)
@@ -2811,7 +2811,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1);
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index 07df86f3156818ce51a98e84488d4a32060b537f..ea0597b719d112d257a2045cce7b7895c4b45e35 100644 (file)
@@ -292,14 +292,14 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
 #endif /* SLJIT_LITTLE_ENDIAN */
 
 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void))
 {
        sljit_uw* ptrs;
 
        if (func_ptr)
                *func_ptr = (void*)context;
 
-       ptrs = (sljit_uw*)func;
+       ptrs = (sljit_uw*)(sljit_uw)func;
        context->addr = addr ? addr : ptrs[0];
        context->r2 = ptrs[1];
        context->r11 = ptrs[2];
@@ -749,7 +749,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
                if (((sljit_sw)code_ptr) & 0x4)
                        code_ptr++;
 #endif /* SLJIT_CONFIG_PPC_64 */
-               sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void*)sljit_generate_code);
+               sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void (*)(void))sljit_generate_code);
        }
 #endif /* SLJIT_INDIRECT_CALL */
 
@@ -1422,6 +1422,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile
        op = GET_OPCODE(op);
        switch (op) {
        case SLJIT_BREAKPOINT:
+               return push_inst(compiler, 0x7fe00008);
        case SLJIT_NOP:
                return push_inst(compiler, NOP);
        case SLJIT_LMUL_UW:
@@ -1733,7 +1734,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
 #define TEST_ADD_IMM(src, srcw) \
        ((src) == SLJIT_IMM && (srcw) <= 0x7fff7fffl && (srcw) >= -0x80000000l)
 #define TEST_UI_IMM(src, srcw) \
-       ((src) == SLJIT_IMM && !((srcw) & ~0xffffffff))
+       ((src) == SLJIT_IMM && !((srcw) & ~(sljit_sw)0xffffffff))
 
 #define TEST_ADD_FORM1(op) \
        (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
@@ -2141,7 +2142,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1);
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
@@ -2575,7 +2576,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj
 static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type)
 {
        switch (type) {
-       case SLJIT_NOT_CARRY:
+       case SLJIT_CARRY:
                if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB)
                        return (4 << 21) | (2 << 16);
                SLJIT_FALLTHROUGH
@@ -2584,7 +2585,7 @@ static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type
        case SLJIT_ATOMIC_STORED:
                return (12 << 21) | (2 << 16);
 
-       case SLJIT_CARRY:
+       case SLJIT_NOT_CARRY:
                if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB)
                        return (12 << 21) | (2 << 16);
                SLJIT_FALLTHROUGH
@@ -2675,7 +2676,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
        type &= 0xff;
 
        if ((type | 0x1) == SLJIT_NOT_CARRY)
-               PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO) | B(TMP_ZERO)));
+               PTR_FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO)));
 
        /* In PPC, we don't need to touch the arguments. */
        if (type < SLJIT_JUMP)
@@ -3033,7 +3034,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
        }
 
        if ((type | 0x1) == SLJIT_NOT_CARRY)
-               FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO)));
+               FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO)));
 
        size = compiler->size;
 
@@ -3075,7 +3076,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
        }
 
        if (((type & ~SLJIT_32) | 0x1) == SLJIT_NOT_CARRY)
-               FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO)));
+               FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO)));
 
        size = compiler->size;
 
index 113d1f88702e8b839511d2acd955f0a2fdef3c71..0b8ccab3eb95bcf94948e53429b75e647dc626af 100644 (file)
@@ -76,6 +76,11 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r
        if (imm <= 0x7fffffffl && imm >= S32_MIN)
                return load_immediate32(compiler, dst_r, imm);
 
+       if (RISCV_HAS_BITMANIP_A(93) && (sljit_uw)imm <= 0xffffffff) {
+               FAIL_IF(load_immediate(compiler, dst_r, (sljit_s32)imm, tmp_r));
+               return push_inst(compiler, ADD_UW | RD(dst_r) | RS1(dst_r) | RS2(TMP_ZERO));
+       }
+
        /* Shifted small immediates. */
 
        high = imm;
index dec12c9a67ff4fd6a6ca848d6cb08407fed9b236..1089bddb875202a6170a317d996ec0a69b362503 100644 (file)
@@ -158,9 +158,9 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
 {
        /* The arch string is not entirely correct since 'g' contains 'a'. */
 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
-       return "RISC-V-32 (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO;
+       return "RISCV (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO;
 #else /* !SLJIT_CONFIG_RISCV_32 */
-       return "RISC-V-64 (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO;
+       return "RISCV (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO;
 #endif /* SLJIT_CONFIG_RISCV_32 */
 }
 
@@ -248,6 +248,7 @@ static const sljit_u8 vreg_map[SLJIT_NUMBER_OF_VECTOR_REGISTERS + 3] = {
 
 #define ADD            (F7(0x0) | F3(0x0) | OPC(0x33))
 #define ADDI           (F3(0x0) | OPC(0x13))
+#define ADD_UW         (F7(0x4) | F3(0x0) | OPC(0x3b))
 #define AND            (F7(0x0) | F3(0x7) | OPC(0x33))
 #define ANDI           (F3(0x7) | OPC(0x13))
 #define AUIPC          (OPC(0x17))
@@ -1983,6 +1984,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
        case SLJIT_MOV_U32:
                SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
                if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
+                       if (RISCV_HAS_BITMANIP_A(93))
+                               return push_inst(compiler, ADD_UW | RD(dst) | RS1(src2) | RS2(TMP_ZERO));
                        FAIL_IF(push_inst(compiler, SLLI | RD(dst) | RS1(src2) | IMM_I(32)));
                        return push_inst(compiler, SRLI | RD(dst) | RS1(dst) | IMM_I(32));
                }
@@ -2046,15 +2049,13 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
 
                if (flags & SRC2_IMM) {
                        if (is_overflow) {
-                               if (src2 >= 0) {
+                               if (dst == src1) {
                                        if (RISCV_HAS_COMPRESSED(200))
-                                               FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1)));
+                                               FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1)));
                                        else
-                                               FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0)));
-                               } else
-                                       FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1)));
-                       }
-                       else if (op & SLJIT_SET_Z)
+                                               FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0)));
+                               }
+                       } else if (op & SLJIT_SET_Z)
                                FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(src2)));
 
                        /* Only the zero flag is needed. */
@@ -2088,7 +2089,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
                }
 
                /* Carry is zero if a + b >= a or a + b >= b, otherwise it is 1. */
-               if (is_overflow || carry_src_r != 0) {
+               if (carry_src_r != 0 || (is_overflow && !(flags & SRC2_IMM))) {
                        if (flags & SRC2_IMM)
                                FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(dst) | IMM_I(src2)));
                        else
@@ -2098,6 +2099,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
                if (!is_overflow)
                        return SLJIT_SUCCESS;
 
+               if (flags & SRC2_IMM) {
+                       if (src2 >= 0)
+                               return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1));
+                       return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst));
+               }
+
                FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG)));
                if (op & SLJIT_SET_Z) {
                        if (RISCV_HAS_COMPRESSED(200))
@@ -2234,18 +2241,18 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
 
                if (flags & SRC2_IMM) {
                        if (is_overflow) {
-                               if (src2 >= 0) {
+                               if (dst == src1) {
                                        if (RISCV_HAS_COMPRESSED(200))
-                                               FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1)));
+                                               FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1)));
                                        else
-                                               FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0)));
-                               } else
-                                       FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1)));
-                       } else if (op & SLJIT_SET_Z)
-                               FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2)));
-
-                       if (is_overflow || is_carry)
-                               FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2)));
+                                               FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0)));
+                               }
+                       } else {
+                               if (op & SLJIT_SET_Z)
+                                       FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2)));
+                               if (is_carry)
+                                       FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2)));
+                       }
 
                        /* Only the zero flag is needed. */
                        if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK)) {
@@ -2276,6 +2283,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
                if (!is_overflow)
                        return SLJIT_SUCCESS;
 
+               if (flags & SRC2_IMM) {
+                       if (src2 >= 0)
+                               return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1));
+                       return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst));
+               }
+
                FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG)));
                if (op & SLJIT_SET_Z) {
                        if (RISCV_HAS_COMPRESSED(200))
@@ -2901,7 +2914,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1);
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index 98f671e1027f1ad1dc8883a2a8fb830f79cbe0cf..1032ec0ba92a64538fb4c30329750bc0b21e677f 100644 (file)
@@ -3163,7 +3163,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= 0x3f;
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index 25085a8f9f1107e286417b3a763887cce209bec6..840443fd8eef2f9d67b8daa050fa598e7a65d71f 100644 (file)
@@ -681,6 +681,9 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p
        sljit_s32 short_jump;
        sljit_uw label_addr;
        sljit_uw jump_addr;
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+       sljit_uw rel_size;
+#endif /* SLJIT_CONFIG_X86_64 */
 
        jump_addr = (sljit_uw)code_ptr;
        if (!(jump->flags & JUMP_ADDR)) {
@@ -692,7 +695,8 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p
                label_addr = jump->u.target - (sljit_uw)executable_offset;
 
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-       if ((sljit_sw)(label_addr - (jump_addr + 6)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + 5)) < HALFWORD_MIN)
+       rel_size = (type < SLJIT_JUMP) ? 6 : 5;
+       if ((sljit_sw)(label_addr - (jump_addr + rel_size)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + rel_size)) < HALFWORD_MIN)
                return detect_far_jump_type(jump, code_ptr);
 #endif /* SLJIT_CONFIG_X86_64 */
 
@@ -1067,7 +1071,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)
        case SLJIT_HAS_COPY_F32:
        case SLJIT_HAS_COPY_F64:
        case SLJIT_HAS_ATOMIC:
+               return 1;
+
        case SLJIT_HAS_MEMORY_BARRIER:
+#if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2)
+               if (cpu_feature_list == 0)
+                       get_cpu_features();
+               return (cpu_feature_list & CPU_FEATURE_SSE2) != 0;
+#endif
                return 1;
 
 #if !(defined SLJIT_IS_FPU_AVAILABLE) || SLJIT_IS_FPU_AVAILABLE
@@ -3036,7 +3047,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c
        shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1);
 
        if (src2 == SLJIT_IMM) {
-               src2w = src2w << shift_arg;
+               src2w = (sljit_sw)((sljit_uw)src2w << shift_arg);
                shift_arg = 0;
        }
 
index 593bab279281698699d9cccacf5c85fd03f22ac6..3adf495a93d153d224d468db2d74bfba172b0f1f 100644 (file)
@@ -519,13 +519,14 @@ system. The following are installed (file names are all relative to the
     *.html (lots more pages, hyperlinked from index.html)
 
   Text file documentation (share/doc/pcre2):
-    AUTHORS
+    AUTHORS.md
     COPYING
     ChangeLog
-    LICENCE
+    LICENCE.md
     NEWS
     README
-    SECURITY
+    SECURITY.md
+    SUPPORT-LIFECYCLE.md
     pcre2.txt         (a concatenation of the man(3) pages)
     pcre2test.txt     the pcre2test man page
     pcre2grep.txt     the pcre2grep man page
@@ -920,6 +921,7 @@ The distribution should contain the files listed below.
   LICENCE.md               conditions for the use of PCRE2
   COPYING                  the same, using GNU's standard name
   SECURITY.md              information on reporting vulnerabilities
+  SUPPORT-LIFECYCLE.md     information on the support policy
   Makefile.in              ) template for Unix Makefile, which is built by
                            )   "configure"
   Makefile.am              ) the automake input that was used to create
@@ -962,10 +964,10 @@ The distribution should contain the files listed below.
   testdata/testoutput*     expected test results
   testdata/grep*           input and output for pcre2grep tests
   testdata/*               other supporting test files
-  src/libpcre2-8.sym       )
-  src/libpcre2-16.sym      ) symbol version scripts for the GNU and Sun linkers
-  src/libpcre2-32.sym      )
-  src/libpcre2-posix.sym   )
+  src/libpcre2-8.sym.in     )
+  src/libpcre2-16.sym.in    ) symbol version script templates for the
+  src/libpcre2-32.sym.in    ) GNU, BSD and Sun linkers
+  src/libpcre2-posix.sym.in )
 
 (D) Auxiliary files for CMake support
 
@@ -991,6 +993,7 @@ The distribution should contain the files listed below.
   BUILD.bazel             ) files used by the Bazel
   MODULE.bazel            )   build system
   build.zig               file used by zig's build system
+  build.zig.zon           file used by zig's package manager
 
 (G) Auxiliary files for building PCRE2 under OpenVMS
 
@@ -999,7 +1002,7 @@ The distribution should contain the files listed below.
   vms/pcre2.h_patch       )
   vms/stdint.h            )
 
-=============================
-Last updated: 15 October 2025
-=============================
+============================
+Last updated: 08 August 2026
+============================
 
index 52f013e5e914d69a4027616af89b35ce4669bf78..8b6f7fc143607da7d2e3e129053fea803d2ebeb6 100644 (file)
@@ -1374,14 +1374,18 @@ documentation for more details.
 <pre>
   PCRE2_CONFIG_JITTARGET
 </pre>
-The <i>where</i> argument should point to a buffer that is at least 64 code
-units long. (The exact length required can be found by calling
-<b>pcre2_config()</b> with <b>where</b> set to NULL.) The buffer is filled with a
-string that contains the name of the architecture for which the JIT compiler is
-configured, for example "x86 32bit (little endian + unaligned)". If JIT support
-is not available, PCRE2_ERROR_BADOPTION is returned, otherwise the number of
-code units used is returned. This is the length of the string, plus one unit
-for the terminating zero.
+The <i>where</i> argument should point to a code-unit-aligned buffer. All
+previous versions of PCRE2 have required no more than 128 code units of buffer
+capacity. However, this requirement is not guaranteed to be maintained, so
+applications should call <b>pcre2_config()</b> with <b>where</b> set to NULL to
+receive the required buffer size, then assert or allocate a suitably-size buffer
+for a second call to <b>pcre2_config()</b>. The buffer is filled with a string
+that contains the name of the architecture for which the JIT compiler is
+configured at build time, for example, a 64-bit ARM CPU that supports the
+Armv8.1 extension writes "ARM-64 (LSE) 64bit (little endian + unaligned)". If
+JIT support is not available, PCRE2_ERROR_BADOPTION is returned; otherwise the
+number of code units used is returned. This is the length of the string plus one
+unit for the terminating zero.
 <pre>
   PCRE2_CONFIG_LINKSIZE
 </pre>
@@ -1450,13 +1454,15 @@ below.
 <pre>
   PCRE2_CONFIG_UNICODE_VERSION
 </pre>
-The <i>where</i> argument should point to a buffer that is at least 24 code
-units long. (The exact length required can be found by calling
-<b>pcre2_config()</b> with <b>where</b> set to NULL.) If PCRE2 has been compiled
-without Unicode support, the buffer is filled with the text "Unicode not
-supported". Otherwise, the Unicode version string (for example, "8.0.0") is
-inserted. The number of code units used is returned. This is the length of the
-string plus one unit for the terminating zero.
+The <i>where</i> argument should point to a code-unit-aligned buffer. All
+previous versions of PCRE2 have required no more than 24 code units of buffer
+capacity. However, applications should call <b>pcre2_config()</b> with
+<b>where</b> set to NULL to receive the required buffer size, then assert or
+allocate a suitably-size buffer for a second call to <b>pcre2_config()</b>. If
+PCRE2 has been compiled without Unicode support, the buffer is filled with the
+text "Unicode not supported". Otherwise, the Unicode version string (for
+example, "8.0.0") is written. The number of code units used is returned. This is
+the length of the string plus one unit for the terminating zero.
 <pre>
   PCRE2_CONFIG_UNICODE
 </pre>
@@ -1465,12 +1471,14 @@ available; otherwise it is set to zero. Unicode support implies UTF support.
 <pre>
   PCRE2_CONFIG_VERSION
 </pre>
-The <i>where</i> argument should point to a buffer that is at least 24 code
-units long. (The exact length required can be found by calling
-<b>pcre2_config()</b> with <b>where</b> set to NULL.) The buffer is filled with
-the PCRE2 version string, zero-terminated. The number of code units used is
-returned. This is the length of the string plus one unit for the terminating
-zero.
+The <i>where</i> argument should point to a code-unit-aligned buffer. All
+previous versions of PCRE2 have required no more than 24 code units of buffer
+capacity. However, applications should call <b>pcre2_config()</b> with
+<b>where</b> set to NULL to receive the required buffer size, then assert or
+allocate a suitably-size buffer for a second call to <b>pcre2_config()</b>. The
+buffer is filled with the PCRE2 version string, zero-terminated. The number of
+code units used is returned. This is the length of the string plus one unit for
+the terminating zero.
 <a name="compiling"></a></p>
 <h2><a name="SEC20" href="#TOC1">COMPILING A PATTERN</a></h2>
 <p>
@@ -3526,7 +3534,7 @@ A common task for applications is to implement "global" matching behaviour,
 for example, replacing all matches in the subject; splitting the subject on all
 matches; or simply counting the number of matches. The <b>pcre2_next_match()</b>
 function helps with this task by providing the appropriate parameters for the
-next match attempt (available since PCRE2 10.46).
+next match attempt (available since PCRE2 10.47).
 </p>
 <p>
 First, a match attempt should be made using one of the matching functions
@@ -3917,6 +3925,15 @@ output buffer. Substitution callouts (see
 can be used to separate them if necessary.
 </p>
 <p>
+Partial matching is supported, with limitations: if matching succeeds but with a
+partial match, then pcre2_substitute returns PCRE2_ERROR_PARTIAL. When
+partial-matching (either of PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT is passed),
+then PCRE2_SUBSTITUTE_REPLACEMENT_ONLY must also be set, or else
+PCRE2_ERROR_BADOPTION is returned. Similarly, certain replacement items
+($' and $_) cause PCRE2_ERROR_PARTIALSUBS to be returned when partial-matching,
+even if a complete match is found.
+</p>
+<p>
 The <i>outlengthptr</i> argument of <b>pcre2_substitute()</b> must point to a
 variable that contains the length, in code units, of the output buffer. If the
 function is successful, the value is updated to contain the length in code
@@ -4623,7 +4640,7 @@ Cambridge, England.
 </p>
 <h2><a name="SEC44" href="#TOC1">REVISION</a></h2>
 <p>
-Last updated: 19 October 2025
+Last updated: 08 December 2025
 <br>
 Copyright &copy; 1997-2024 University of Cambridge.
 <br>
index cc26cc060b3d5c797841ddcc98216cd3c4bf115f..c3f18f414910a9f3004268dc29934d0494b28a27 100644 (file)
@@ -460,10 +460,11 @@ processed by <b>pcre2_jit_compile()</b>).
 The fast path function is called <b>pcre2_jit_match()</b>, and it takes exactly
 the same arguments as <b>pcre2_match()</b>. However, the subject string must be
 specified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported
-option bits (for example, PCRE2_ANCHORED and PCRE2_ENDANCHORED) are ignored, as
-is the PCRE2_NO_JIT option. The return values are also the same as for
-<b>pcre2_match()</b>, plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial
-or complete) is requested that was not compiled.
+option bits (for example, PCRE2_ANCHORED, PCRE2_ENDANCHORED, and
+PCRE2_COPY_MATCHED_SUBJECT) are ignored, as is the PCRE2_NO_JIT option. The
+return values are also the same as for <b>pcre2_match()</b>, plus
+PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested
+that was not compiled.
 </p>
 <p>
 When you call <b>pcre2_match()</b>, as well as testing for invalid options, a
@@ -496,7 +497,7 @@ Cambridge, England.
 </p>
 <h2><a name="SEC14" href="#TOC1">REVISION</a></h2>
 <p>
-Last updated: 22 August 2024
+Last updated: 08 August 2026
 <br>
 Copyright &copy; 1997-2024 University of Cambridge.
 <br>
index 529cc7bc766a59c3fe34628c0faa43b987366845..acce6664b1d1615831123e4bf638a7da26a723c7 100644 (file)
@@ -388,6 +388,20 @@ two buffers. If a partial match at offset <i>n</i> in the first buffer is
 followed by "no match" when PCRE2_DFA_RESTART is used on the second buffer, you
 can then try a new match starting at offset <i>n+1</i> in the first buffer.
 </p>
+<p>
+Therefore, PCRE2_DFA_RESTART does not remove the need to keep earlier subject
+data. In order to perform a bumpalong and continue matching at the next
+character, all subject data from the current match start must be retained,
+together with enough preceding data to satisfy the requirements of lookbehind
+assertions (remembering as above that PCRE2_INFO_MAXLOOKBEHIND only describes
+the buffer requirement of a single lookbehind, and nested lookbehinds can read
+back further from the match start). This makes streaming match processing
+using PCRE2_DFA_RESTART challenging, and the application cannot easily set a
+bound on the number of chunks to buffer. For multi-segment searching that is
+intended to produce the same result as searching the whole subject, it is
+usually simpler to avoid PCRE2_DFA_RESTART and run a fresh match, using either
+matching function, over the retained text.
+</p>
 <h2><a name="SEC7" href="#TOC1">AUTHOR</a></h2>
 <p>
 Philip Hazel
@@ -399,7 +413,7 @@ Cambridge, England.
 </p>
 <h2><a name="SEC8" href="#TOC1">REVISION</a></h2>
 <p>
-Last updated: 27 November 2024
+Last updated: 16 August 2026
 <br>
 Copyright &copy; 1997-2019 University of Cambridge.
 <br>
index a18a29771508dbc258fc54dd84da4e55ab77fd42..9ff064e0ccbd579cb46d71e5f3ece45147b298dc 100644 (file)
@@ -3451,7 +3451,7 @@ below.
 Recursion and subroutines with returned capture groups
 </h3>
 <p>
-Since PCRE2 10.46, recursion and subroutine calls may also specify a list of
+Since PCRE2 10.47, recursion and subroutine calls may also specify a list of
 capture groups to return. This is a PCRE2 syntax extension not supported by
 Perl. The pattern matching recurses into the referenced expression as described
 above, however, when the recursion returns to the calling expression the
@@ -4183,7 +4183,7 @@ Cambridge, England.
 </p>
 <h2><a name="SEC34" href="#TOC1">REVISION</a></h2>
 <p>
-Last updated: 03 September 2025
+Last updated: 25 October 2025
 <br>
 Copyright &copy; 1997-2024 University of Cambridge.
 <br>
index cc9136a11778e62b2ef8d696d375ca9fda794392..208d6606b6675f5e9adbec9748645c72de9539d4 100644 (file)
@@ -214,9 +214,11 @@ If an unknown option is given, an error message is output; the exit code is 0.
 </p>
 <p>
 <b>--colo[u]r[=&#60;always,auto,never&#62;]</b>
-By default, the output is coloured if the output file is a terminal (<b>auto</b>).
-Force or suppress output of ANSI colour escapes with <b>always</b> and <b>never</b>
-respectively.
+With <b>auto</b>, the output is coloured if the output is to a terminal. Force or
+suppress output of ANSI colour escapes with <b>always</b> (or no specifier
+provided) and <b>never</b> respectively. If no colour option is provided, the
+default is <b>auto</b>, unless the NO_COLOR environment variable is defined and
+non-empty.
 </p>
 <p>
 <b>-d</b>
@@ -861,7 +863,7 @@ when it can never be used.
 The <b>framesize</b> modifier shows the size, in bytes, of each storage frame
 used by <b>pcre2_match()</b> for handling backtracking. The size depends on the
 number of capturing parentheses in the pattern. A vector of these frames is
-used at matching time; its overall size is shown when the <b>heaframes_size</b>
+used at matching time; its overall size is shown when the <b>heapframes_size</b>
 subject modifier is set.
 </p>
 <p>
@@ -2303,7 +2305,7 @@ Cambridge, England.
 </p>
 <h2><a name="SEC21" href="#TOC1">REVISION</a></h2>
 <p>
-Last updated: 12 October 2025
+Last updated: 22 August 2026
 <br>
 Copyright &copy; 1997-2024 University of Cambridge.
 <br>
index c119a11a629b885fda662a7482976da3093e7c98..e72663fa357fdccd449fd7514ea4e976642f1496 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2-CONFIG 1 "22 February 2025" "PCRE2 10.47"
+.TH PCRE2-CONFIG 1 "22 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 pcre2-config - program to return PCRE2 configuration
 .SH SYNOPSIS
index 74592eb81667a492719a31fc4fdfe8e4111cd3d1..c134a6ab0404b62cd1740ca9f124c26a669c54b3 100644 (file)
@@ -81,4 +81,4 @@ REVISION
        Last updated: 22 February 2025
 
 
-PCRE2 10.47                    22 February 2025                PCRE2-CONFIG(1)
+PCRE2 10.48-RC1                22 February 2025                PCRE2-CONFIG(1)
index 1c3d9d280c158501a27355e4f77bdb6064d38684..0698b67fa0303d7241d76b39c257bff4abef6006 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2 3 "22 February 2025" "PCRE2 10.47"
+.TH PCRE2 3 "22 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH INTRODUCTION
index b0b564c35d80275e49e26bf2396f51f862d6f239..f934cd20970589f2030a61ed54a863a4ccc3036e 100644 (file)
@@ -189,7 +189,7 @@ REVISION
        Copyright (c) 1997-2021 University of Cambridge.
 
 
-PCRE2 10.47                    22 February 2025                       PCRE2(3)
+PCRE2 10.48-RC1                22 February 2025                       PCRE2(3)
 ------------------------------------------------------------------------------
 
 
@@ -1364,14 +1364,19 @@ CHECKING BUILD-TIME OPTIONS
 
          PCRE2_CONFIG_JITTARGET
 
-       The  where  argument  should point to a buffer that is at least 64 code
-       units long.  (The  exact  length  required  can  be  found  by  calling
-       pcre2_config()  with  where  set  to NULL.) The buffer is filled with a
-       string that contains the name of the architecture  for  which  the  JIT
-       compiler  is  configured,  for  example "x86 32bit (little endian + un-
-       aligned)". If JIT support is not  available,  PCRE2_ERROR_BADOPTION  is
-       returned,  otherwise the number of code units used is returned. This is
-       the length of the string, plus one unit for the terminating zero.
+       The where argument should point to a code-unit-aligned buffer. All pre-
+       vious  versions  of  PCRE2 have required no more than 128 code units of
+       buffer capacity. However, this requirement  is  not  guaranteed  to  be
+       maintained,  so  applications should call pcre2_config() with where set
+       to NULL to receive the required buffer size, then assert or allocate  a
+       suitably-size buffer for a second call to pcre2_config(). The buffer is
+       filled  with  a  string  that contains the name of the architecture for
+       which the JIT compiler is configured at  build  time,  for  example,  a
+       64-bit ARM CPU that supports the Armv8.1 extension writes "ARM-64 (LSE)
+       64bit  (little  endian  + unaligned)". If JIT support is not available,
+       PCRE2_ERROR_BADOPTION is returned; otherwise the number of  code  units
+       used  is  returned.  This is the length of the string plus one unit for
+       the terminating zero.
 
          PCRE2_CONFIG_LINKSIZE
 
@@ -1441,13 +1446,16 @@ CHECKING BUILD-TIME OPTIONS
 
          PCRE2_CONFIG_UNICODE_VERSION
 
-       The  where  argument  should point to a buffer that is at least 24 code
-       units long.  (The  exact  length  required  can  be  found  by  calling
-       pcre2_config()  with  where  set  to  NULL.) If PCRE2 has been compiled
-       without Unicode support, the buffer is filled with  the  text  "Unicode
-       not  supported".  Otherwise,  the  Unicode version string (for example,
-       "8.0.0") is inserted. The number of code units used is  returned.  This
-       is the length of the string plus one unit for the terminating zero.
+       The where argument should point to a code-unit-aligned buffer. All pre-
+       vious  versions  of  PCRE2  have required no more than 24 code units of
+       buffer capacity. However, applications should call pcre2_config()  with
+       where  set  to NULL to receive the required buffer size, then assert or
+       allocate a suitably-size buffer for a second call to pcre2_config(). If
+       PCRE2 has been compiled without Unicode support, the buffer  is  filled
+       with  the  text "Unicode not supported". Otherwise, the Unicode version
+       string (for example, "8.0.0") is written. The number of code units used
+       is returned. This is the length of the string plus  one  unit  for  the
+       terminating zero.
 
          PCRE2_CONFIG_UNICODE
 
@@ -1457,12 +1465,14 @@ CHECKING BUILD-TIME OPTIONS
 
          PCRE2_CONFIG_VERSION
 
-       The  where  argument  should point to a buffer that is at least 24 code
-       units long.  (The  exact  length  required  can  be  found  by  calling
-       pcre2_config()  with  where set to NULL.) The buffer is filled with the
-       PCRE2 version string, zero-terminated. The number of code units used is
-       returned. This is the length of the string plus one unit for the termi-
-       nating zero.
+       The where argument should point to a code-unit-aligned buffer. All pre-
+       vious  versions  of  PCRE2  have required no more than 24 code units of
+       buffer capacity. However, applications should call pcre2_config()  with
+       where  set  to NULL to receive the required buffer size, then assert or
+       allocate a suitably-size buffer for a second  call  to  pcre2_config().
+       The  buffer  is  filled with the PCRE2 version string, zero-terminated.
+       The number of code units used is returned. This is the  length  of  the
+       string plus one unit for the terminating zero.
 
 
 COMPILING A PATTERN
@@ -1477,107 +1487,107 @@ COMPILING A PATTERN
 
        pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *code);
 
-       The pcre2_compile() function compiles a pattern into an internal  form.
-       The  pattern  is  defined  by a pointer to a string of code units and a
+       The  pcre2_compile() function compiles a pattern into an internal form.
+       The pattern is defined by a pointer to a string of  code  units  and  a
        length in code units. If the pattern is zero-terminated, the length can
-       be specified as PCRE2_ZERO_TERMINATED. A NULL pattern  pointer  with  a
-       length  of  zero  is  treated  as an empty string (NULL with a non-zero
-       length causes an error return). The function returns  a  pointer  to  a
+       be  specified  as  PCRE2_ZERO_TERMINATED. A NULL pattern pointer with a
+       length of zero is treated as an empty  string  (NULL  with  a  non-zero
+       length  causes  an  error  return). The function returns a pointer to a
        block of memory that contains the compiled pattern and related data, or
        NULL if an error occurred.
 
-       If  the  compile context argument ccontext is NULL, memory for the com-
-       piled pattern is obtained by calling malloc().  Otherwise,  it  is  ob-
+       If the compile context argument ccontext is NULL, memory for  the  com-
+       piled  pattern  is  obtained  by calling malloc(). Otherwise, it is ob-
        tained from the same memory function that was used for the compile con-
        text. The caller must free the memory by calling pcre2_code_free() when
        it is no longer needed.  If pcre2_code_free() is called with a NULL ar-
        gument, it returns immediately, without doing anything.
 
        The function pcre2_code_copy() makes a copy of the compiled code in new
-       memory,  using  the same memory allocator as was used for the original.
-       However, if the code has been processed by the JIT  compiler  (see  be-
-       low),  the JIT information cannot be copied (because it is position-de-
-       pendent).  The new copy can initially be used only for  non-JIT  match-
-       ing,  though  it  can  be passed to pcre2_jit_compile() if required. If
+       memory, using the same memory allocator as was used for  the  original.
+       However,  if  the  code has been processed by the JIT compiler (see be-
+       low), the JIT information cannot be copied (because it is  position-de-
+       pendent).   The  new copy can initially be used only for non-JIT match-
+       ing, though it can be passed to  pcre2_jit_compile()  if  required.  If
        pcre2_code_copy() is called with a NULL argument, it returns NULL.
 
        The pcre2_code_copy() function provides a way for individual threads in
-       a multithreaded application to acquire a private copy  of  shared  com-
-       piled  code.   However, it does not make a copy of the character tables
-       used by the compiled pattern; the new pattern code points to  the  same
-       tables  as  the original code.  (See "Locale Support" below for details
-       of these character tables.) In many applications the  same  tables  are
-       used  throughout, so this behaviour is appropriate. Nevertheless, there
+       a  multithreaded  application  to acquire a private copy of shared com-
+       piled code.  However, it does not make a copy of the  character  tables
+       used  by  the compiled pattern; the new pattern code points to the same
+       tables as the original code.  (See "Locale Support" below  for  details
+       of  these  character  tables.) In many applications the same tables are
+       used throughout, so this behaviour is appropriate. Nevertheless,  there
        are occasions when a copy of a compiled pattern and the relevant tables
-       are needed. The pcre2_code_copy_with_tables() provides  this  facility.
-       Copies  of  both  the  code  and the tables are made, with the new code
-       pointing to the new tables. The memory for the new tables is  automati-
-       cally  freed  when  pcre2_code_free() is called for the new copy of the
-       compiled code. If pcre2_code_copy_with_tables() is called with  a  NULL
+       are  needed.  The pcre2_code_copy_with_tables() provides this facility.
+       Copies of both the code and the tables are  made,  with  the  new  code
+       pointing  to the new tables. The memory for the new tables is automati-
+       cally freed when pcre2_code_free() is called for the new  copy  of  the
+       compiled  code.  If pcre2_code_copy_with_tables() is called with a NULL
        argument, it returns NULL.
 
-       NOTE:  When  one  of  the matching functions is called, pointers to the
+       NOTE: When one of the matching functions is  called,  pointers  to  the
        compiled pattern and the subject string are set in the match data block
-       so that they can be referenced by the  substring  extraction  functions
-       after  a  successful match.  After running a match, you must not free a
-       compiled pattern or a subject string until after all operations on  the
-       match  data  block have taken place, unless, in the case of the subject
-       string, you have used the PCRE2_COPY_MATCHED_SUBJECT option,  which  is
-       described  in  the section entitled "Option bits for pcre2_match()" be-
+       so  that  they  can be referenced by the substring extraction functions
+       after a successful match.  After running a match, you must not  free  a
+       compiled  pattern or a subject string until after all operations on the
+       match data block have taken place, unless, in the case of  the  subject
+       string,  you  have used the PCRE2_COPY_MATCHED_SUBJECT option, which is
+       described in the section entitled "Option bits for  pcre2_match()"  be-
        low.
 
-       The options argument for pcre2_compile() contains various bit  settings
-       that  affect the compilation. It should be zero if none of them are re-
-       quired. The available options are described below.  Some  of  them  (in
-       particular,  those  that  are  compatible with Perl, but some others as
-       well) can also be set and unset from within the pattern  (see  the  de-
+       The  options argument for pcre2_compile() contains various bit settings
+       that affect the compilation. It should be zero if none of them are  re-
+       quired.  The  available  options  are described below. Some of them (in
+       particular, those that are compatible with Perl,  but  some  others  as
+       well)  can  also  be set and unset from within the pattern (see the de-
        tailed description in the pcre2pattern documentation).
 
-       For  those options that can be different in different parts of the pat-
-       tern, the contents of the options argument specifies their settings  at
-       the  start  of  compilation. The PCRE2_ANCHORED, PCRE2_ENDANCHORED, and
-       PCRE2_NO_UTF_CHECK options can be set at the time of matching  as  well
+       For those options that can be different in different parts of the  pat-
+       tern,  the contents of the options argument specifies their settings at
+       the start of compilation. The  PCRE2_ANCHORED,  PCRE2_ENDANCHORED,  and
+       PCRE2_NO_UTF_CHECK  options  can be set at the time of matching as well
        as at compile time.
 
        Some additional options and less frequently required compile-time para-
-       meters  (for example, the newline setting) can be provided in a compile
+       meters (for example, the newline setting) can be provided in a  compile
        context (as described above).
 
        If errorcode or erroroffset is NULL, pcre2_compile() returns NULL imme-
-       diately. Otherwise, the variables to which these point are  set  to  an
+       diately.  Otherwise,  the  variables to which these point are set to an
        error code and an offset (number of code units) within the pattern, re-
        spectively, when pcre2_compile() returns NULL because a compilation er-
        ror has occurred.
 
        There are over 100 positive error codes that pcre2_compile() may return
        if it finds an error in the pattern. There are also some negative error
-       codes  that  are used for invalid UTF strings when validity checking is
-       in  force.  These  are  the  same  as  given   by   pcre2_match()   and
+       codes that are used for invalid UTF strings when validity  checking  is
+       in   force.   These   are  the  same  as  given  by  pcre2_match()  and
        pcre2_dfa_match(), and are described in the pcre2unicode documentation.
-       There  is  no  separate documentation for the positive error codes, be-
-       cause the textual error messages  that  are  obtained  by  calling  the
+       There is no separate documentation for the positive  error  codes,  be-
+       cause  the  textual  error  messages  that  are obtained by calling the
        pcre2_get_error_message() function (see "Obtaining a textual error mes-
-       sage"  below)  should  be  self-explanatory.  Macro names starting with
-       PCRE2_ERROR_ are defined for both positive and negative error codes  in
-       pcre2.h.  When  compilation  is  successful errorcode is set to a value
-       that returns the message "no error" if passed  to  pcre2_get_error_mes-
+       sage" below) should be  self-explanatory.  Macro  names  starting  with
+       PCRE2_ERROR_  are defined for both positive and negative error codes in
+       pcre2.h. When compilation is successful errorcode is  set  to  a  value
+       that  returns  the message "no error" if passed to pcre2_get_error_mes-
        sage().
 
        The value returned in erroroffset is an indication of where in the pat-
-       tern  an  error  occurred.  When there is no error, zero is returned. A
-       non-zero value is not necessarily the furthest  point  in  the  pattern
-       that  was  read.  For example, after the error "lookbehind assertion is
-       not fixed length", the error offset points to the start of the  failing
+       tern an error occurred. When there is no error,  zero  is  returned.  A
+       non-zero  value  is  not  necessarily the furthest point in the pattern
+       that was read. For example, after the error  "lookbehind  assertion  is
+       not  fixed length", the error offset points to the start of the failing
        assertion. For an invalid UTF-8 or UTF-16 string, the offset is that of
        the first code unit of the failing character.
 
-       Some  errors are not detected until the whole pattern has been scanned;
-       in these cases, the offset passed back is the length  of  the  pattern.
-       Note  that  the  offset is in code units, not characters, even in a UTF
+       Some errors are not detected until the whole pattern has been  scanned;
+       in  these  cases,  the offset passed back is the length of the pattern.
+       Note that the offset is in code units, not characters, even  in  a  UTF
        mode. It may sometimes point into the middle of a UTF-8 or UTF-16 char-
        acter.
 
-       This code fragment shows a typical straightforward call  to  pcre2_com-
+       This  code  fragment shows a typical straightforward call to pcre2_com-
        pile():
 
          pcre2_code *re;
@@ -1594,471 +1604,471 @@ COMPILING A PATTERN
 
    Main compile options
 
-       The  following  names for option bits are defined in the pcre2.h header
+       The following names for option bits are defined in the  pcre2.h  header
        file:
 
          PCRE2_ANCHORED
 
        If this bit is set, the pattern is forced to be "anchored", that is, it
-       is constrained to match only at the first matching point in the  string
-       that  is being searched (the "subject string"). This effect can also be
-       achieved by appropriate constructs in the pattern itself, which is  the
+       is  constrained to match only at the first matching point in the string
+       that is being searched (the "subject string"). This effect can also  be
+       achieved  by appropriate constructs in the pattern itself, which is the
        only way to do it in Perl.
 
          PCRE2_ALLOW_EMPTY_CLASS
 
-       By  default, for compatibility with Perl, a closing square bracket that
-       immediately follows an opening one is treated as a data  character  for
-       the  class.  When  PCRE2_ALLOW_EMPTY_CLASS  is  set,  it terminates the
+       By default, for compatibility with Perl, a closing square bracket  that
+       immediately  follows  an opening one is treated as a data character for
+       the class. When  PCRE2_ALLOW_EMPTY_CLASS  is  set,  it  terminates  the
        class, which therefore contains no characters and so can never match.
 
          PCRE2_ALT_BSUX
 
-       This option request alternative handling  of  three  escape  sequences,
-       which  makes  PCRE2's  behaviour more like ECMAscript (aka JavaScript).
+       This  option  request  alternative  handling of three escape sequences,
+       which makes PCRE2's behaviour more like  ECMAscript  (aka  JavaScript).
        When it is set:
 
        (1) \U matches an upper case "U" character; by default \U causes a com-
        pile time error (Perl uses \U to upper case subsequent characters).
 
        (2) \u matches a lower case "u" character unless it is followed by four
-       hexadecimal digits, in which case the hexadecimal  number  defines  the
-       code  point  to match. By default, \u causes a compile time error (Perl
+       hexadecimal  digits,  in  which case the hexadecimal number defines the
+       code point to match. By default, \u causes a compile time  error  (Perl
        uses it to upper case the following character).
 
-       (3) \x matches a lower case "x" character unless it is followed by  two
-       hexadecimal  digits,  in  which case the hexadecimal number defines the
-       code point to match. By default, as in Perl, a  hexadecimal  number  is
+       (3)  \x matches a lower case "x" character unless it is followed by two
+       hexadecimal digits, in which case the hexadecimal  number  defines  the
+       code  point  to  match. By default, as in Perl, a hexadecimal number is
        always expected after \x, but it may have one or two digits.
 
        ECMAscript 6 added additional functionality to \u. This can be accessed
-       using  the  PCRE2_EXTRA_ALT_BSUX  extra  option (see "Extra compile op-
+       using the PCRE2_EXTRA_ALT_BSUX extra option  (see  "Extra  compile  op-
        tions" below).  Note that this alternative escape handling applies only
-       to patterns. Neither of these options affects  the  processing  of  re-
+       to  patterns.  Neither  of  these options affects the processing of re-
        placement strings passed to pcre2_substitute().
 
          PCRE2_ALT_CIRCUMFLEX
 
        In  multiline  mode  (when  PCRE2_MULTILINE  is  set),  the  circumflex
-       metacharacter matches at the start of the subject (unless  PCRE2_NOTBOL
-       is  set),  and  also  after  any internal newline. However, it does not
+       metacharacter  matches at the start of the subject (unless PCRE2_NOTBOL
+       is set), and also after any internal  newline.  However,  it  does  not
        match after a newline at the end of the subject, for compatibility with
-       Perl. If you want a multiline circumflex also to match after  a  termi-
+       Perl.  If  you want a multiline circumflex also to match after a termi-
        nating newline, you must set PCRE2_ALT_CIRCUMFLEX.
 
          PCRE2_ALT_EXTENDED_CLASS
 
-       Alters  the  parsing of character classes to follow the extended syntax
+       Alters the parsing of character classes to follow the  extended  syntax
        described by Unicode UTS#18. The PCRE2_ALT_EXTENDED_CLASS option has no
-       impact on the behaviour of the Perl-specific "(?[...])" syntax for  ex-
-       tended  classes, but instead enables the alternative syntax of extended
-       class behaviour inside ordinary  "[...]"  character  classes.  See  the
-       pcre2pattern  documentation  for  details of the character classes sup-
+       impact  on the behaviour of the Perl-specific "(?[...])" syntax for ex-
+       tended classes, but instead enables the alternative syntax of  extended
+       class  behaviour  inside  ordinary  "[...]"  character classes. See the
+       pcre2pattern documentation for details of the  character  classes  sup-
        ported.
 
          PCRE2_ALT_VERBNAMES
 
-       By default, for compatibility with Perl, the name in any verb  sequence
-       such  as  (*MARK:NAME)  is any sequence of characters that does not in-
-       clude a closing parenthesis. The name is not processed in any way,  and
-       it  is  not possible to include a closing parenthesis in the name. How-
-       ever, if the PCRE2_ALT_VERBNAMES option is set, normal  backslash  pro-
-       cessing  is  applied to verb names and only an unescaped closing paren-
-       thesis terminates the name. A closing parenthesis can be included in  a
-       name  either  as  \)  or  between  \Q  and \E. If the PCRE2_EXTENDED or
-       PCRE2_EXTENDED_MORE option is set with  PCRE2_ALT_VERBNAMES,  unescaped
+       By  default, for compatibility with Perl, the name in any verb sequence
+       such as (*MARK:NAME) is any sequence of characters that  does  not  in-
+       clude  a closing parenthesis. The name is not processed in any way, and
+       it is not possible to include a closing parenthesis in the  name.  How-
+       ever,  if  the PCRE2_ALT_VERBNAMES option is set, normal backslash pro-
+       cessing is applied to verb names and only an unescaped  closing  paren-
+       thesis  terminates the name. A closing parenthesis can be included in a
+       name either as \) or between  \Q  and  \E.  If  the  PCRE2_EXTENDED  or
+       PCRE2_EXTENDED_MORE  option  is set with PCRE2_ALT_VERBNAMES, unescaped
        white space in verb names is skipped and #-comments are recognized, ex-
        actly as in the rest of the pattern.
 
          PCRE2_AUTO_CALLOUT
 
-       If  this  bit  is  set,  pcre2_compile()  automatically inserts callout
-       items, all with number 255, before each pattern  item,  except  immedi-
-       ately  before  or after an explicit callout in the pattern. For discus-
+       If this bit  is  set,  pcre2_compile()  automatically  inserts  callout
+       items,  all  with  number 255, before each pattern item, except immedi-
+       ately before or after an explicit callout in the pattern.  For  discus-
        sion of the callout facility, see the pcre2callout documentation.
 
          PCRE2_CASELESS
 
-       If this bit is set, letters in the pattern match both upper  and  lower
-       case  letters in the subject. It is equivalent to Perl's /i option, and
-       it can be changed within a pattern by a (?i) option setting. If  either
-       PCRE2_UTF  or  PCRE2_UCP  is  set,  Unicode properties are used for all
-       characters with more than one other case, and for all characters  whose
+       If  this  bit is set, letters in the pattern match both upper and lower
+       case letters in the subject. It is equivalent to Perl's /i option,  and
+       it  can be changed within a pattern by a (?i) option setting. If either
+       PCRE2_UTF or PCRE2_UCP is set, Unicode  properties  are  used  for  all
+       characters  with more than one other case, and for all characters whose
        code points are greater than U+007F.
 
        Note that there are two ASCII characters, K and S, that, in addition to
-       their  lower  case  ASCII  equivalents, are case-equivalent with U+212A
+       their lower case ASCII equivalents,  are  case-equivalent  with  U+212A
        (Kelvin sign) and U+017F (long S) respectively. If you do not want this
-       case equivalence, you can  suppress  it  by  setting  PCRE2_EXTRA_CASE-
+       case  equivalence,  you  can  suppress  it by setting PCRE2_EXTRA_CASE-
        LESS_RESTRICT.
 
-       One  language family, Turkish and Azeri, has its own case-insensitivity
-       rules, which can be  selected  by  setting  PCRE2_EXTRA_TURKISH_CASING.
-       This  alters  the behaviour of the 'i', 'I', U+0130 (capital I with dot
+       One language family, Turkish and Azeri, has its own  case-insensitivity
+       rules,  which  can  be  selected by setting PCRE2_EXTRA_TURKISH_CASING.
+       This alters the behaviour of the 'i', 'I', U+0130 (capital I  with  dot
        above), and U+0131 (small dotless i) characters.
 
        For lower valued characters with only one other case, a lookup table is
-       used for speed. When neither PCRE2_UTF nor PCRE2_UCP is set,  a  lookup
+       used  for  speed. When neither PCRE2_UTF nor PCRE2_UCP is set, a lookup
        table is used for all code points less than 256, and higher code points
        (available only in 16-bit or 32-bit mode) are treated as not having an-
        other case.
 
        From release 10.45 PCRE2_CASELESS also affects what some of the letter-
-       related  Unicode  property escapes (\p and \P) match. The properties Lu
+       related Unicode property escapes (\p and \P) match. The  properties  Lu
        (upper case letter), Ll (lower case letter), and Lt (title case letter)
        are all treated as LC (cased letter) when PCRE2_CASELESS is set.
 
          PCRE2_DOLLAR_ENDONLY
 
-       If this bit is set, a dollar metacharacter in the pattern matches  only
-       at  the  end  of the subject string. Without this option, a dollar also
-       matches immediately before a newline at the end of the string (but  not
-       before  any other newlines). The PCRE2_DOLLAR_ENDONLY option is ignored
-       if PCRE2_MULTILINE is set. There is no equivalent  to  this  option  in
+       If  this bit is set, a dollar metacharacter in the pattern matches only
+       at the end of the subject string. Without this option,  a  dollar  also
+       matches  immediately before a newline at the end of the string (but not
+       before any other newlines). The PCRE2_DOLLAR_ENDONLY option is  ignored
+       if  PCRE2_MULTILINE  is  set.  There is no equivalent to this option in
        Perl, and no way to set it within a pattern.
 
          PCRE2_DOTALL
 
-       If  this  bit  is  set,  a dot metacharacter in the pattern matches any
-       character, including one that indicates a  newline.  However,  it  only
+       If this bit is set, a dot metacharacter  in  the  pattern  matches  any
+       character,  including  one  that  indicates a newline. However, it only
        ever matches one character, even if newlines are coded as CRLF. Without
        this option, a dot does not match when the current position in the sub-
-       ject  is  at  a newline. This option is equivalent to Perl's /s option,
+       ject is at a newline. This option is equivalent to  Perl's  /s  option,
        and it can be changed within a pattern by a (?s) option setting. A neg-
-       ative class such as [^a] always matches newline characters, and the  \N
-       escape  sequence always matches a non-newline character, independent of
+       ative  class such as [^a] always matches newline characters, and the \N
+       escape sequence always matches a non-newline character, independent  of
        the setting of PCRE2_DOTALL.
 
          PCRE2_DUPNAMES
 
-       If this bit is set, names used to identify capture groups need  not  be
-       unique.   This  can  be helpful for certain types of pattern when it is
-       known that only one instance of the named group can  ever  be  matched.
-       There  are  more  details  of  named capture groups below; see also the
+       If  this  bit is set, names used to identify capture groups need not be
+       unique.  This can be helpful for certain types of pattern  when  it  is
+       known  that  only  one instance of the named group can ever be matched.
+       There are more details of named capture  groups  below;  see  also  the
        pcre2pattern documentation.
 
          PCRE2_ENDANCHORED
 
-       If this bit is set, the end of any pattern match must be right  at  the
+       If  this  bit is set, the end of any pattern match must be right at the
        end of the string being searched (the "subject string"). If the pattern
        match succeeds by reaching (*ACCEPT), but does not reach the end of the
-       subject,  the match fails at the current starting point. For unanchored
-       patterns, a new match is then tried at the next  starting  point.  How-
+       subject, the match fails at the current starting point. For  unanchored
+       patterns,  a  new  match is then tried at the next starting point. How-
        ever, if the match succeeds by reaching the end of the pattern, but not
-       the  end  of  the subject, backtracking occurs and an alternative match
+       the end of the subject, backtracking occurs and  an  alternative  match
        may be found. Consider these two patterns:
 
          .(*ACCEPT)|..
          .|..
 
-       If matched against "abc" with PCRE2_ENDANCHORED set, the first  matches
-       "c"  whereas  the  second matches "bc". The effect of PCRE2_ENDANCHORED
-       can also be achieved by appropriate constructs in the  pattern  itself,
+       If  matched against "abc" with PCRE2_ENDANCHORED set, the first matches
+       "c" whereas the second matches "bc". The  effect  of  PCRE2_ENDANCHORED
+       can  also  be achieved by appropriate constructs in the pattern itself,
        which is the only way to do it in Perl.
 
        For DFA matching with pcre2_dfa_match(), PCRE2_ENDANCHORED applies only
-       to  the  first  (that  is,  the longest) matched string. Other parallel
-       matches, which are necessarily substrings of the first one, must  obvi-
+       to the first (that is, the  longest)  matched  string.  Other  parallel
+       matches,  which are necessarily substrings of the first one, must obvi-
        ously end before the end of the subject.
 
          PCRE2_EXTENDED
 
-       If  this bit is set, most white space characters in the pattern are to-
-       tally ignored except when escaped, inside a character class, or  inside
-       a  \Q...\E  sequence.  However,  white  space is not allowed within se-
-       quences such as (?> that introduce various  parenthesized  groups,  nor
-       within  numerical  quantifiers  such as {1,3}. Ignorable white space is
-       permitted between an item and a  following  quantifier  and  between  a
-       quantifier  and  a following + that indicates possessiveness. PCRE2_EX-
-       TENDED is equivalent to Perl's /x option, and it can be changed  within
+       If this bit is set, most white space characters in the pattern are  to-
+       tally  ignored except when escaped, inside a character class, or inside
+       a \Q...\E sequence. However, white space  is  not  allowed  within  se-
+       quences  such  as  (?> that introduce various parenthesized groups, nor
+       within numerical quantifiers such as {1,3}. Ignorable  white  space  is
+       permitted  between  an  item  and  a following quantifier and between a
+       quantifier and a following + that indicates  possessiveness.  PCRE2_EX-
+       TENDED  is equivalent to Perl's /x option, and it can be changed within
        a pattern by a (?x) option setting.
 
-       When  PCRE2  is compiled without Unicode support, PCRE2_EXTENDED recog-
-       nizes as white space only those characters with code points  less  than
+       When PCRE2 is compiled without Unicode support,  PCRE2_EXTENDED  recog-
+       nizes  as  white space only those characters with code points less than
        256 that are flagged as white space in its low-character table. The ta-
        ble is normally created by pcre2_maketables(), which uses the isspace()
-       function  to identify space characters. In most ASCII environments, the
-       relevant characters are those with code  points  0x0009  (tab),  0x000A
-       (linefeed),  0x000B (vertical tab), 0x000C (formfeed), 0x000D (carriage
+       function to identify space characters. In most ASCII environments,  the
+       relevant  characters  are  those  with code points 0x0009 (tab), 0x000A
+       (linefeed), 0x000B (vertical tab), 0x000C (formfeed), 0x000D  (carriage
        return), and 0x0020 (space).
 
        When PCRE2 is compiled with Unicode support, in addition to these char-
-       acters, five more Unicode "Pattern White Space" characters  are  recog-
+       acters,  five  more Unicode "Pattern White Space" characters are recog-
        nized by PCRE2_EXTENDED. These are U+0085 (next line), U+200E (left-to-
-       right  mark), U+200F (right-to-left mark), U+2028 (line separator), and
-       U+2029 (paragraph separator). This set of characters  is  the  same  as
-       recognized  by  Perl's /x option. Note that the horizontal and vertical
-       space characters that are matched by the \h and \v escapes in  patterns
+       right mark), U+200F (right-to-left mark), U+2028 (line separator),  and
+       U+2029  (paragraph  separator).  This  set of characters is the same as
+       recognized by Perl's /x option. Note that the horizontal  and  vertical
+       space  characters that are matched by the \h and \v escapes in patterns
        are a much bigger set.
 
-       As  well as ignoring most white space, PCRE2_EXTENDED also causes char-
-       acters between an unescaped # outside a character class  and  the  next
-       newline,  inclusive,  to be ignored, which makes it possible to include
+       As well as ignoring most white space, PCRE2_EXTENDED also causes  char-
+       acters  between  an  unescaped # outside a character class and the next
+       newline, inclusive, to be ignored, which makes it possible  to  include
        comments inside complicated patterns. Note that the end of this type of
-       comment is a literal newline sequence in the pattern; escape  sequences
+       comment  is a literal newline sequence in the pattern; escape sequences
        that happen to represent a newline do not count.
 
        Which characters are interpreted as newlines can be specified by a set-
-       ting  in  the compile context that is passed to pcre2_compile() or by a
-       special sequence at the start of the pattern, as described in the  sec-
-       tion  entitled "Newline conventions" in the pcre2pattern documentation.
+       ting in the compile context that is passed to pcre2_compile() or  by  a
+       special  sequence at the start of the pattern, as described in the sec-
+       tion entitled "Newline conventions" in the pcre2pattern  documentation.
        A default is defined when PCRE2 is built.
 
          PCRE2_EXTENDED_MORE
 
-       This option has the effect of PCRE2_EXTENDED,  but,  in  addition,  un-
-       escaped  space and horizontal tab characters are ignored inside a char-
-       acter class. Note: only these two characters are ignored, not the  full
-       set  of pattern white space characters that are ignored outside a char-
-       acter class. PCRE2_EXTENDED_MORE is equivalent to  Perl's  /xx  option,
+       This  option  has  the  effect of PCRE2_EXTENDED, but, in addition, un-
+       escaped space and horizontal tab characters are ignored inside a  char-
+       acter  class. Note: only these two characters are ignored, not the full
+       set of pattern white space characters that are ignored outside a  char-
+       acter  class.  PCRE2_EXTENDED_MORE  is equivalent to Perl's /xx option,
        and it can be changed within a pattern by a (?xx) option setting.
 
          PCRE2_FIRSTLINE
 
        If this option is set, the start of an unanchored pattern match must be
-       before  or  at  the  first  newline in the subject string following the
-       start of matching, though the matched text may continue over  the  new-
+       before or at the first newline in  the  subject  string  following  the
+       start  of  matching, though the matched text may continue over the new-
        line. If startoffset is non-zero, the limiting newline is not necessar-
-       ily  the  first  newline  in  the  subject. For example, if the subject
+       ily the first newline in the  subject.  For  example,  if  the  subject
        string is "abc\nxyz" (where \n represents a single-character newline) a
-       pattern match for "yz" succeeds with PCRE2_FIRSTLINE if startoffset  is
-       greater  than 3. See also PCRE2_USE_OFFSET_LIMIT, which provides a more
-       general limiting facility. If PCRE2_FIRSTLINE is  set  with  an  offset
-       limit,  a match must occur in the first line and also within the offset
+       pattern  match for "yz" succeeds with PCRE2_FIRSTLINE if startoffset is
+       greater than 3. See also PCRE2_USE_OFFSET_LIMIT, which provides a  more
+       general  limiting  facility.  If  PCRE2_FIRSTLINE is set with an offset
+       limit, a match must occur in the first line and also within the  offset
        limit. In other words, whichever limit comes first is used. This option
        has no effect for anchored patterns.
 
          PCRE2_LITERAL
 
        If this option is set, all meta-characters in the pattern are disabled,
-       and it is treated as a literal string. Matching literal strings with  a
+       and  it is treated as a literal string. Matching literal strings with a
        regular expression engine is not the most efficient way of doing it. If
-       you  are  doing  a  lot of literal matching and are worried about effi-
+       you are doing a lot of literal matching and  are  worried  about  effi-
        ciency, you should consider using other approaches. The only other main
        options  that  are  allowed  with  PCRE2_LITERAL  are:  PCRE2_ANCHORED,
        PCRE2_ENDANCHORED, PCRE2_AUTO_CALLOUT, PCRE2_CASELESS, PCRE2_FIRSTLINE,
        PCRE2_MATCH_INVALID_UTF,  PCRE2_NO_START_OPTIMIZE,  PCRE2_NO_UTF_CHECK,
-       PCRE2_UTF, and  PCRE2_USE_OFFSET_LIMIT.  The  extra  options  PCRE2_EX-
+       PCRE2_UTF,  and  PCRE2_USE_OFFSET_LIMIT.  The  extra  options PCRE2_EX-
        TRA_MATCH_LINE and PCRE2_EXTRA_MATCH_WORD are also supported. Any other
        options cause an error.
 
          PCRE2_MATCH_INVALID_UTF
 
-       This  option  forces PCRE2_UTF (see below) and also enables support for
-       matching by pcre2_match() in subject strings that contain  invalid  UTF
-       sequences.   Note,  however, that the 16-bit and 32-bit PCRE2 libraries
-       process strings as sequences of uint16_t or uint32_t code points.  They
+       This option forces PCRE2_UTF (see below) and also enables  support  for
+       matching  by  pcre2_match() in subject strings that contain invalid UTF
+       sequences.  Note, however, that the 16-bit and 32-bit  PCRE2  libraries
+       process  strings as sequences of uint16_t or uint32_t code points. They
        cannot find valid UTF sequences within an arbitrary string of bytes un-
-       less  such  sequences  are  suitably aligned. This facility is not sup-
-       ported for DFA matching. For details, see the  pcre2unicode  documenta-
+       less such sequences are suitably aligned. This  facility  is  not  sup-
+       ported  for  DFA matching. For details, see the pcre2unicode documenta-
        tion.
 
          PCRE2_MATCH_UNSET_BACKREF
 
-       If  this  option  is  set,  a  backreference  to an unset capture group
-       matches an empty string (by default this causes  the  current  matching
+       If this option is set,  a  backreference  to  an  unset  capture  group
+       matches  an  empty  string (by default this causes the current matching
        alternative to fail).  A pattern such as (\1)(a) succeeds when this op-
-       tion  is  set  (assuming it can find an "a" in the subject), whereas it
-       fails by default, for Perl compatibility.  Setting  this  option  makes
+       tion is set (assuming it can find an "a" in the  subject),  whereas  it
+       fails  by  default,  for  Perl compatibility. Setting this option makes
        PCRE2 behave more like ECMAscript (aka JavaScript).
 
          PCRE2_MULTILINE
 
-       By  default,  for  the purposes of matching "start of line" and "end of
-       line", PCRE2 treats the subject string as consisting of a  single  line
-       of  characters,  even  if  it actually contains newlines. The "start of
-       line" metacharacter (^) matches only at the start of  the  string,  and
-       the  "end  of  line"  metacharacter  ($) matches only at the end of the
-       string, or before a terminating newline (except  when  PCRE2_DOLLAR_EN-
+       By default, for the purposes of matching "start of line"  and  "end  of
+       line",  PCRE2  treats the subject string as consisting of a single line
+       of characters, even if it actually contains  newlines.  The  "start  of
+       line"  metacharacter  (^)  matches only at the start of the string, and
+       the "end of line" metacharacter ($) matches only  at  the  end  of  the
+       string,  or  before a terminating newline (except when PCRE2_DOLLAR_EN-
        DONLY is set). Note, however, that unless PCRE2_DOTALL is set, the "any
-       character"  metacharacter  (.) does not match at a newline. This behav-
+       character" metacharacter (.) does not match at a newline.  This  behav-
        iour (for ^, $, and dot) is the same as Perl.
 
-       When PCRE2_MULTILINE it is set, the "start of line" and "end  of  line"
-       constructs  match  immediately following or immediately before internal
-       newlines in the subject string, respectively, as well as  at  the  very
-       start  and  end.  This is equivalent to Perl's /m option, and it can be
+       When  PCRE2_MULTILINE  it is set, the "start of line" and "end of line"
+       constructs match immediately following or immediately  before  internal
+       newlines  in  the  subject string, respectively, as well as at the very
+       start and end. This is equivalent to Perl's /m option, and  it  can  be
        changed within a pattern by a (?m) option setting. Note that the "start
        of line" metacharacter does not match after a newline at the end of the
-       subject, for compatibility with Perl.  However, you can change this  by
-       setting  the PCRE2_ALT_CIRCUMFLEX option. If there are no newlines in a
-       subject string, or no occurrences of ^  or  $  in  a  pattern,  setting
+       subject,  for compatibility with Perl.  However, you can change this by
+       setting the PCRE2_ALT_CIRCUMFLEX option. If there are no newlines in  a
+       subject  string,  or  no  occurrences  of  ^ or $ in a pattern, setting
        PCRE2_MULTILINE has no effect.
 
          PCRE2_NEVER_BACKSLASH_C
 
-       This  option  locks out the use of \C in the pattern that is being com-
-       piled.  This escape can  cause  unpredictable  behaviour  in  UTF-8  or
-       UTF-16  modes,  because  it may leave the current matching point in the
+       This option locks out the use of \C in the pattern that is  being  com-
+       piled.   This  escape  can  cause  unpredictable  behaviour in UTF-8 or
+       UTF-16 modes, because it may leave the current matching  point  in  the
        middle of a multi-code-unit character. This option may be useful in ap-
        plications that process patterns from external sources. Note that there
        is also a build-time option that permanently locks out the use of \C.
 
          PCRE2_NEVER_UCP
 
-       This option locks out the use of Unicode properties  for  handling  \B,
+       This  option  locks  out the use of Unicode properties for handling \B,
        \b, \D, \d, \S, \s, \W, \w, and some of the POSIX character classes, as
-       described  for  the  PCRE2_UCP option below. In particular, it prevents
-       the creator of the pattern from enabling this facility by starting  the
-       pattern  with  (*UCP).  This  option may be useful in applications that
-       process  patterns  from  external  sources.  The   option   combination
+       described for the PCRE2_UCP option below. In  particular,  it  prevents
+       the  creator of the pattern from enabling this facility by starting the
+       pattern with (*UCP). This option may be  useful  in  applications  that
+       process   patterns   from  external  sources.  The  option  combination
        PCRE2_UCP and PCRE2_NEVER_UCP causes an error.
 
          PCRE2_NEVER_UTF
 
-       This  option  locks out interpretation of the pattern as UTF-8, UTF-16,
+       This option locks out interpretation of the pattern as  UTF-8,  UTF-16,
        or UTF-32, depending on which library is in use. In particular, it pre-
-       vents the creator of the pattern from switching to  UTF  interpretation
-       by  starting  the pattern with (*UTF). This option may be useful in ap-
+       vents  the  creator of the pattern from switching to UTF interpretation
+       by starting the pattern with (*UTF). This option may be useful  in  ap-
        plications that process patterns from external sources. The combination
        of PCRE2_UTF and PCRE2_NEVER_UTF causes an error.
 
          PCRE2_NO_AUTO_CAPTURE
 
        If this option is set, it disables the use of numbered capturing paren-
-       theses in the pattern. Any opening parenthesis that is not followed  by
-       ?  behaves as if it were followed by ?: but named parentheses can still
+       theses  in the pattern. Any opening parenthesis that is not followed by
+       ? behaves as if it were followed by ?: but named parentheses can  still
        be used for capturing (and they acquire numbers in the usual way). This
-       is the same as Perl's /n option.  Note that, when this option  is  set,
-       references  to  capture  groups (backreferences or recursion/subroutine
-       calls) may only refer to named groups, though the reference can  be  by
+       is  the  same as Perl's /n option.  Note that, when this option is set,
+       references to capture groups  (backreferences  or  recursion/subroutine
+       calls)  may  only refer to named groups, though the reference can be by
        name or by number.
 
          PCRE2_NO_AUTO_POSSESS
 
-       If  this  (deprecated)  option  is set, it disables "auto-possessifica-
-       tion", which is an optimization that, for example, turns a+b into  a++b
+       If this (deprecated) option is  set,  it  disables  "auto-possessifica-
+       tion",  which is an optimization that, for example, turns a+b into a++b
        in order to avoid backtracks into a+ that can never be successful. How-
-       ever,  if  callouts  are  in use, auto-possessification means that some
-       callouts are never taken. You can set  this  option  if  you  want  the
-       matching  functions  to  do  a  full unoptimized search and run all the
+       ever, if callouts are in use,  auto-possessification  means  that  some
+       callouts  are  never  taken.  You  can  set this option if you want the
+       matching functions to do a full unoptimized  search  and  run  all  the
        callouts, but it is mainly provided for testing purposes.
 
-       If  a  compile  context  is  available,  it  is  recommended   to   use
-       pcre2_set_optimize()  with  the directive PCRE2_AUTO_POSSESS_OFF rather
-       than   the   compile   option    PCRE2_NO_AUTO_POSSESS.    Note    that
-       PCRE2_NO_AUTO_POSSESS  takes  precedence  over the pcre2_set_optimize()
+       If   a   compile  context  is  available,  it  is  recommended  to  use
+       pcre2_set_optimize() with the directive  PCRE2_AUTO_POSSESS_OFF  rather
+       than    the    compile    option   PCRE2_NO_AUTO_POSSESS.   Note   that
+       PCRE2_NO_AUTO_POSSESS takes precedence  over  the  pcre2_set_optimize()
        optimization directives PCRE2_AUTO_POSSESS and PCRE2_AUTO_POSSESS_OFF.
 
          PCRE2_NO_DOTSTAR_ANCHOR
 
        If this (deprecated) option is set, it disables an optimization that is
-       applied when .* is the first significant item in a top-level branch  of
-       a  pattern, and all the other branches also start with .* or with \A or
+       applied  when .* is the first significant item in a top-level branch of
+       a pattern, and all the other branches also start with .* or with \A  or
        \G or ^. The optimization is automatically disabled for .* if it is in-
-       side an atomic group or a capture group that is the subject of a  back-
+       side  an atomic group or a capture group that is the subject of a back-
        reference, or if the pattern contains (*PRUNE) or (*SKIP). When the op-
        timization is not disabled, such a pattern is automatically anchored if
        PCRE2_DOTALL is set for all the .* items and PCRE2_MULTILINE is not set
-       for  any  ^ items. Otherwise, the fact that any match must start either
-       at the start of the subject or following a newline is remembered.  Like
+       for any ^ items. Otherwise, the fact that any match must  start  either
+       at  the start of the subject or following a newline is remembered. Like
        other optimizations, this can cause callouts to be skipped.  (If a com-
-       pile  context  is  available,  it is recommended to use pcre2_set_opti-
+       pile context is available, it is  recommended  to  use  pcre2_set_opti-
        mize() with the directive PCRE2_DOTSTAR_ANCHOR_OFF instead.)
 
          PCRE2_NO_START_OPTIMIZE
 
-       This is an option whose main effect is at matching time.  It  does  not
+       This  is  an  option whose main effect is at matching time. It does not
        change what pcre2_compile() generates, but it does affect the output of
        the  JIT  compiler.  Setting  this  option  is  equivalent  to  calling
-       pcre2_set_optimize()   with   the   directive    parameter    set    to
+       pcre2_set_optimize()    with    the    directive   parameter   set   to
        PCRE2_START_OPTIMIZE_OFF.
 
-       There  are  a  number of optimizations that may occur at the start of a
-       match, in order to speed up the process. For example, if  it  is  known
-       that  an  unanchored  match must start with a specific code unit value,
-       the matching code searches the subject for that value, and fails  imme-
-       diately  if it cannot find it, without actually running the main match-
-       ing function. The start-up optimizations are in effect  a  pre-scan  of
+       There are a number of optimizations that may occur at the  start  of  a
+       match,  in  order  to speed up the process. For example, if it is known
+       that an unanchored match must start with a specific  code  unit  value,
+       the  matching code searches the subject for that value, and fails imme-
+       diately if it cannot find it, without actually running the main  match-
+       ing  function.  The  start-up optimizations are in effect a pre-scan of
        the subject that takes place before the pattern is run.
 
-       Disabling  the  start-up optimizations may cause performance to suffer.
-       However, this may be desirable for patterns which contain  callouts  or
-       items  such  as  (*COMMIT)  and  (*MARK).  See the above description of
+       Disabling the start-up optimizations may cause performance  to  suffer.
+       However,  this  may be desirable for patterns which contain callouts or
+       items such as (*COMMIT) and  (*MARK).  See  the  above  description  of
        PCRE2_START_OPTIMIZE_OFF for further details.
 
          PCRE2_NO_UTF_CHECK
 
-       When PCRE2_UTF is set, the validity of the pattern as a UTF  string  is
-       automatically  checked.  There  are  discussions  about the validity of
-       UTF-8 strings, UTF-16 strings, and UTF-32 strings in  the  pcre2unicode
-       document.  If an invalid UTF sequence is found, pcre2_compile() returns
+       When  PCRE2_UTF  is set, the validity of the pattern as a UTF string is
+       automatically checked. There are  discussions  about  the  validity  of
+       UTF-8  strings,  UTF-16 strings, and UTF-32 strings in the pcre2unicode
+       document. If an invalid UTF sequence is found, pcre2_compile()  returns
        a negative error code.
 
-       If you know that your pattern is a valid UTF string, and  you  want  to
-       skip   this   check   for   performance   reasons,   you  can  set  the
+       If  you  know  that your pattern is a valid UTF string, and you want to
+       skip  this  check  for   performance   reasons,   you   can   set   the
        PCRE2_NO_UTF_CHECK option. When it is set, the effect of passing an in-
-       valid UTF string as a pattern is undefined. It may cause  your  program
+       valid  UTF  string as a pattern is undefined. It may cause your program
        to crash or loop.
 
        Note  that  this  option  can  also  be  passed  to  pcre2_match()  and
-       pcre2_dfa_match(), to suppress UTF validity  checking  of  the  subject
+       pcre2_dfa_match(),  to  suppress  UTF  validity checking of the subject
        string.
 
        Note also that setting PCRE2_NO_UTF_CHECK at compile time does not dis-
-       able  the error that is given if an escape sequence for an invalid Uni-
-       code code point is encountered in the pattern. In particular,  the  so-
-       called  "surrogate"  code points (0xd800 to 0xdfff) are invalid. If you
-       want to allow escape  sequences  such  as  \x{d800}  you  can  set  the
-       PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  extra  option, as described in the
-       section entitled "Extra compile options" below.  However, this is  pos-
+       able the error that is given if an escape sequence for an invalid  Uni-
+       code  code  point is encountered in the pattern. In particular, the so-
+       called "surrogate" code points (0xd800 to 0xdfff) are invalid.  If  you
+       want  to  allow  escape  sequences  such  as  \x{d800}  you can set the
+       PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra option, as described  in  the
+       section  entitled "Extra compile options" below.  However, this is pos-
        sible only in UTF-8 and UTF-32 modes, because these values are not rep-
        resentable in UTF-16.
 
          PCRE2_UCP
 
        This option has two effects. Firstly, it change the way PCRE2 processes
-       \B,  \b,  \D,  \d,  \S,  \s,  \W,  \w,  and some of the POSIX character
-       classes. By default, only  ASCII  characters  are  recognized,  but  if
-       PCRE2_UCP  is  set, Unicode properties are used to classify characters.
-       There are some PCRE2_EXTRA options (see below) that add  finer  control
-       to  this  behaviour.  More  details are given in the section on generic
+       \B, \b, \D, \d, \S, \s,  \W,  \w,  and  some  of  the  POSIX  character
+       classes.  By  default,  only  ASCII  characters  are recognized, but if
+       PCRE2_UCP is set, Unicode properties are used to  classify  characters.
+       There  are  some PCRE2_EXTRA options (see below) that add finer control
+       to this behaviour. More details are given in  the  section  on  generic
        character types in the pcre2pattern page.
 
-       The second effect of PCRE2_UCP is to force the use of  Unicode  proper-
+       The  second  effect of PCRE2_UCP is to force the use of Unicode proper-
        ties for upper/lower casing operations, even when PCRE2_UTF is not set.
-       This  makes  it  possible  to process strings in the 16-bit UCS-2 code.
-       This option is available only if PCRE2 has been compiled  with  Unicode
+       This makes it possible to process strings in  the  16-bit  UCS-2  code.
+       This  option  is available only if PCRE2 has been compiled with Unicode
        support (which is the default).
 
        The PCRE2_EXTRA_CASELESS_RESTRICT option (see above) restricts caseless
-       matching  such  that  ASCII  characters match only ASCII characters and
-       non-ASCII characters match only  non-ASCII  characters.  The  PCRE2_EX-
-       TRA_TURKISH_CASING  option  (see  above) alters the matching of the 'i'
-       characters to follow their behaviour in Turkish  and  Azeri  languages.
-       For  further  details  on  PCRE2_EXTRA_CASELESS_RESTRICT  and PCRE2_EX-
+       matching such that ASCII characters match  only  ASCII  characters  and
+       non-ASCII  characters  match  only  non-ASCII characters. The PCRE2_EX-
+       TRA_TURKISH_CASING option (see above) alters the matching  of  the  'i'
+       characters  to  follow  their behaviour in Turkish and Azeri languages.
+       For further  details  on  PCRE2_EXTRA_CASELESS_RESTRICT  and  PCRE2_EX-
        TRA_TURKISH_CASING, see the pcre2unicode page.
 
          PCRE2_UNGREEDY
 
-       This option inverts the "greediness" of the quantifiers  so  that  they
-       are  not greedy by default, but become greedy if followed by "?". It is
-       not compatible with Perl. It can also be set by a (?U)  option  setting
+       This  option  inverts  the "greediness" of the quantifiers so that they
+       are not greedy by default, but become greedy if followed by "?". It  is
+       not  compatible  with Perl. It can also be set by a (?U) option setting
        within the pattern.
 
          PCRE2_USE_OFFSET_LIMIT
 
        This option must be set for pcre2_compile() if pcre2_set_offset_limit()
-       is  going  to be used to set a non-default offset limit in a match con-
-       text for matches that use this pattern. An error  is  generated  if  an
-       offset  limit is set without this option. For more details, see the de-
-       scription of pcre2_set_offset_limit() in  the  section  that  describes
+       is going to be used to set a non-default offset limit in a  match  con-
+       text  for  matches  that  use this pattern. An error is generated if an
+       offset limit is set without this option. For more details, see the  de-
+       scription  of  pcre2_set_offset_limit()  in  the section that describes
        match contexts. See also the PCRE2_FIRSTLINE option above.
 
          PCRE2_UTF
 
-       This  option  causes  PCRE2  to regard both the pattern and the subject
-       strings that are subsequently processed as strings  of  UTF  characters
-       instead  of  single-code-unit  strings.  It  is available when PCRE2 is
-       built to include Unicode support (which is  the  default).  If  Unicode
+       This option causes PCRE2 to regard both the  pattern  and  the  subject
+       strings  that  are  subsequently processed as strings of UTF characters
+       instead of single-code-unit strings. It  is  available  when  PCRE2  is
+       built  to  include  Unicode  support (which is the default). If Unicode
        support is not available, the use of this option provokes an error. De-
-       tails  of how PCRE2_UTF changes the behaviour of PCRE2 are given in the
+       tails of how PCRE2_UTF changes the behaviour of PCRE2 are given in  the
        pcre2unicode  page.  In  particular,  note  that  it  changes  the  way
        PCRE2_CASELESS works.
 
    Extra compile options
 
-       The  option  bits  that  can be set in a compile context by calling the
+       The option bits that can be set in a compile  context  by  calling  the
        pcre2_set_compile_extra_options() function are as follows:
 
          PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK
@@ -2070,158 +2080,158 @@ COMPILING A PATTERN
 
          PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES
 
-       This option applies when compiling a pattern in UTF-8 or  UTF-32  mode.
-       It  is  forbidden in UTF-16 mode, and ignored in non-UTF modes. Unicode
+       This  option  applies when compiling a pattern in UTF-8 or UTF-32 mode.
+       It is forbidden in UTF-16 mode, and ignored in non-UTF  modes.  Unicode
        "surrogate" code points in the range 0xd800 to 0xdfff are used in pairs
-       in UTF-16 to encode code points with values in  the  range  0x10000  to
-       0x10ffff.  The  surrogates  cannot  therefore be represented in UTF-16.
+       in  UTF-16  to  encode  code points with values in the range 0x10000 to
+       0x10ffff. The surrogates cannot therefore  be  represented  in  UTF-16.
        They can be represented in UTF-8 and UTF-32, but are defined as invalid
-       code points, and cause errors if  encountered  in  a  UTF-8  or  UTF-32
+       code  points,  and  cause  errors  if  encountered in a UTF-8 or UTF-32
        string that is being checked for validity by PCRE2.
 
-       These  values also cause errors if encountered in escape sequences such
+       These values also cause errors if encountered in escape sequences  such
        as \x{d912} within a pattern. However, it seems that some applications,
        when using PCRE2 to check for unwanted characters in UTF-8 strings, ex-
-       plicitly  test  for  the  surrogates  using   escape   sequences.   The
-       PCRE2_NO_UTF_CHECK  option  does not disable the error that occurs, be-
+       plicitly   test   for   the  surrogates  using  escape  sequences.  The
+       PCRE2_NO_UTF_CHECK option does not disable the error that  occurs,  be-
        cause it applies only to the testing of input strings for UTF validity.
 
-       If the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set,  surro-
-       gate  code  point values in UTF-8 and UTF-32 patterns no longer provoke
-       errors and are incorporated in the compiled pattern. However, they  can
-       only  match  subject characters if the matching function is called with
+       If  the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set, surro-
+       gate code point values in UTF-8 and UTF-32 patterns no  longer  provoke
+       errors  and are incorporated in the compiled pattern. However, they can
+       only match subject characters if the matching function is  called  with
        PCRE2_NO_UTF_CHECK set.
 
          PCRE2_EXTRA_ALT_BSUX
 
-       The original option PCRE2_ALT_BSUX causes PCRE2 to process \U, \u,  and
-       \x  in  the way that ECMAscript (aka JavaScript) does. Additional func-
+       The  original option PCRE2_ALT_BSUX causes PCRE2 to process \U, \u, and
+       \x in the way that ECMAscript (aka JavaScript) does.  Additional  func-
        tionality was defined by ECMAscript 6; setting PCRE2_EXTRA_ALT_BSUX has
-       the effect of PCRE2_ALT_BSUX, but in addition it  recognizes  \u{hhh..}
+       the  effect  of PCRE2_ALT_BSUX, but in addition it recognizes \u{hhh..}
        as a hexadecimal character code, where hhh.. is any number of hexadeci-
        mal digits.
 
          PCRE2_EXTRA_ASCII_BSD
 
-       This  option  forces \d to match only ASCII digits, even when PCRE2_UCP
-       is set.  It can be changed within a pattern by means of the  (?aD)  op-
+       This option forces \d to match only ASCII digits, even  when  PCRE2_UCP
+       is  set.   It can be changed within a pattern by means of the (?aD) op-
        tion setting.
 
          PCRE2_EXTRA_ASCII_BSS
 
-       This  option  forces \s to match only ASCII space characters, even when
-       PCRE2_UCP is set. It can be changed within a pattern by  means  of  the
+       This option forces \s to match only ASCII space characters,  even  when
+       PCRE2_UCP  is  set.  It can be changed within a pattern by means of the
        (?aS) option setting.
 
          PCRE2_EXTRA_ASCII_BSW
 
-       This  option  forces  \w to match only ASCII word characters, even when
-       PCRE2_UCP is set. It can be changed within a pattern by  means  of  the
+       This option forces \w to match only ASCII word  characters,  even  when
+       PCRE2_UCP  is  set.  It can be changed within a pattern by means of the
        (?aW) option setting.
 
          PCRE2_EXTRA_ASCII_DIGIT
 
        This option forces the POSIX character classes [:digit:] and [:xdigit:]
-       to  match  only  ASCII  digits,  even  when PCRE2_UCP is set. It can be
+       to match only ASCII digits, even when  PCRE2_UCP  is  set.  It  can  be
        changed within a pattern by means of the (?aT) option setting.
 
          PCRE2_EXTRA_ASCII_POSIX
 
        This option forces all the POSIX character classes, including [:digit:]
-       and [:xdigit:], to match only ASCII characters, even when PCRE2_UCP  is
-       set.  It  can  be changed within a pattern by means of the (?aP) option
-       setting, but note that this also sets PCRE2_EXTRA_ASCII_DIGIT in  order
+       and  [:xdigit:], to match only ASCII characters, even when PCRE2_UCP is
+       set. It can be changed within a pattern by means of  the  (?aP)  option
+       setting,  but note that this also sets PCRE2_EXTRA_ASCII_DIGIT in order
        to ensure that (?-aP) unsets all ASCII restrictions for POSIX classes.
 
          PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL
 
-       This  is a dangerous option. Use with care. By default, an unrecognized
-       escape such as \j or a malformed one such as \x{2z} causes  a  compile-
+       This is a dangerous option. Use with care. By default, an  unrecognized
+       escape  such  as \j or a malformed one such as \x{2z} causes a compile-
        time error when detected by pcre2_compile(). Perl is somewhat inconsis-
-       tent  in  handling  such items: for example, \j is treated as a literal
-       "j", and non-hexadecimal digits in \x{} are just ignored, though  warn-
-       ings  are given in both cases if Perl's warning switch is enabled. How-
-       ever, a malformed octal number after \o{  always  causes  an  error  in
+       tent in handling such items: for example, \j is treated  as  a  literal
+       "j",  and non-hexadecimal digits in \x{} are just ignored, though warn-
+       ings are given in both cases if Perl's warning switch is enabled.  How-
+       ever,  a  malformed  octal  number  after \o{ always causes an error in
        Perl.
 
-       If  the  PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL  extra  option  is passed to
-       pcre2_compile(), all unrecognized or  malformed  escape  sequences  are
-       treated  as  single-character escapes. For example, \j is a literal "j"
-       and \x{2z} is treated as the literal string "x{2z}". Setting  this  op-
+       If the PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL  extra  option  is  passed  to
+       pcre2_compile(),  all  unrecognized  or  malformed escape sequences are
+       treated as single-character escapes. For example, \j is a  literal  "j"
+       and  \x{2z}  is treated as the literal string "x{2z}". Setting this op-
        tion means that typos in patterns may go undetected and have unexpected
-       results.  Also  note  that a sequence such as [\N{] is interpreted as a
-       malformed attempt at [\N{...}] and so is treated as [N{]  whereas  [\N]
+       results. Also note that a sequence such as [\N{] is  interpreted  as  a
+       malformed  attempt  at [\N{...}] and so is treated as [N{] whereas [\N]
        gives an error because an unqualified \N is a valid escape sequence but
-       is  not supported in a character class. To reiterate: this is a danger-
+       is not supported in a character class. To reiterate: this is a  danger-
        ous option. Use with great care.
 
          PCRE2_EXTRA_CASELESS_RESTRICT
 
-       When either PCRE2_UCP or PCRE2_UTF is set,  caseless  matching  follows
+       When  either  PCRE2_UCP  or PCRE2_UTF is set, caseless matching follows
        Unicode rules, which allow for more than two cases per character. There
        are two case-equivalent character sets that contain both ASCII and non-
        ASCII characters. The ASCII letter S is case-equivalent to U+017f (long
-       S)  and  the ASCII letter K is case-equivalent to U+212a (Kelvin sign).
-       This option disables recognition of case-equivalences  that  cross  the
+       S) and the ASCII letter K is case-equivalent to U+212a  (Kelvin  sign).
+       This  option  disables  recognition of case-equivalences that cross the
        ASCII/non-ASCII boundary. In a caseless match, both characters must ei-
-       ther  be ASCII or non-ASCII. The option can be changed within a pattern
+       ther be ASCII or non-ASCII. The option can be changed within a  pattern
        by the (*CASELESS_RESTRICT) or (?r) option settings.
 
          PCRE2_EXTRA_ESCAPED_CR_IS_LF
 
-       There are some legacy applications where the escape sequence  \r  in  a
-       pattern  is expected to match a newline. If this option is set, \r in a
-       pattern is converted to \n so that it matches a LF  (linefeed)  instead
-       of  a CR (carriage return) character. The option does not affect a lit-
-       eral CR in the pattern, nor does it affect CR specified as an  explicit
+       There  are  some  legacy applications where the escape sequence \r in a
+       pattern is expected to match a newline. If this option is set, \r in  a
+       pattern  is  converted to \n so that it matches a LF (linefeed) instead
+       of a CR (carriage return) character. The option does not affect a  lit-
+       eral  CR in the pattern, nor does it affect CR specified as an explicit
        code point such as \x{0D}.
 
          PCRE2_EXTRA_MATCH_LINE
 
-       This  option  is  provided  for  use  by the -x option of pcre2grep. It
-       causes the pattern only to match complete lines. This  is  achieved  by
-       automatically  inserting  the  code for "^(?:" at the start of the com-
-       piled pattern and ")$" at the end. Thus, when PCRE2_MULTILINE  is  set,
-       the  matched  line may be in the middle of the subject string. This op-
+       This option is provided for use by  the  -x  option  of  pcre2grep.  It
+       causes  the  pattern  only to match complete lines. This is achieved by
+       automatically inserting the code for "^(?:" at the start  of  the  com-
+       piled  pattern  and ")$" at the end. Thus, when PCRE2_MULTILINE is set,
+       the matched line may be in the middle of the subject string.  This  op-
        tion can be used with PCRE2_LITERAL.
 
          PCRE2_EXTRA_MATCH_WORD
 
-       This option is provided for use by  the  -w  option  of  pcre2grep.  It
-       causes  the  pattern only to match strings that have a word boundary at
-       the start and the end. This is achieved by automatically inserting  the
-       code  for "\b(?:" at the start of the compiled pattern and ")\b" at the
-       end. The option may be used with PCRE2_LITERAL. However, it is  ignored
+       This  option  is  provided  for  use  by the -w option of pcre2grep. It
+       causes the pattern only to match strings that have a word  boundary  at
+       the  start and the end. This is achieved by automatically inserting the
+       code for "\b(?:" at the start of the compiled pattern and ")\b" at  the
+       end.  The option may be used with PCRE2_LITERAL. However, it is ignored
        if PCRE2_EXTRA_MATCH_LINE is also set.
 
          PCRE2_EXTRA_NO_BS0
 
        If this option is set (note that its final character is the digit 0) it
-       locks  out  the  use  of the sequence \0 unless at least one more octal
+       locks out the use of the sequence \0 unless at  least  one  more  octal
        digit follows.
 
          PCRE2_EXTRA_PYTHON_OCTAL
 
-       If this option is set, PCRE2 follows Python's  rules  for  interpreting
-       octal  escape  sequences. The rules for handling sequences such as \14,
-       which could be an octal number or a back reference are  different.  De-
+       If  this  option  is set, PCRE2 follows Python's rules for interpreting
+       octal escape sequences. The rules for handling sequences such  as  \14,
+       which  could  be an octal number or a back reference are different. De-
        tails are given in the pcre2pattern documentation.
 
          PCRE2_EXTRA_NEVER_CALLOUT
 
        If this option is set, PCRE2 treats callouts in the pattern as a syntax
        error, returning PCRE2_ERROR_CALLOUT_CALLER_DISABLED. This is useful if
-       the   application  knows  that  a  callout  will  not  be  provided  to
-       pcre2_match(), so that callouts in the pattern  are  not  silently  ig-
+       the  application  knows  that  a  callout  will  not  be  provided   to
+       pcre2_match(),  so  that  callouts  in the pattern are not silently ig-
        nored.
 
          PCRE2_EXTRA_TURKISH_CASING
 
-       This  option  alters  case-equivalence of the 'i' letters to follow the
+       This option alters case-equivalence of the 'i' letters  to  follow  the
        alphabet used by Turkish and Azeri languages. The option can be changed
        within a pattern by the (*TURKISH_CASING) start-of-pattern setting. Ei-
        ther the UTF or UCP options must be set. In the 8-bit library, UTF must
-       be set. This option cannot be  combined  with  PCRE2_EXTRA_CASELESS_RE-
+       be  set.  This  option cannot be combined with PCRE2_EXTRA_CASELESS_RE-
        STRICT.
 
 
@@ -2244,16 +2254,16 @@ JUST-IN-TIME (JIT) COMPILATION
 
        void pcre2_jit_stack_free(pcre2_jit_stack *jit_stack);
 
-       These  functions  provide  support  for  JIT compilation, which, if the
-       just-in-time compiler is available, further processes a  compiled  pat-
+       These functions provide support for  JIT  compilation,  which,  if  the
+       just-in-time  compiler  is available, further processes a compiled pat-
        tern into machine code that executes much faster than the pcre2_match()
-       interpretive  matching function. Full details are given in the pcre2jit
+       interpretive matching function. Full details are given in the  pcre2jit
        documentation.
 
-       JIT compilation is a heavyweight optimization. It can  take  some  time
-       for  patterns  to  be analyzed, and for one-off matches and simple pat-
-       terns the benefit of faster execution might be offset by a much  slower
-       compilation  time.  Most (but not all) patterns can be optimized by the
+       JIT  compilation  is  a heavyweight optimization. It can take some time
+       for patterns to be analyzed, and for one-off matches  and  simple  pat-
+       terns  the benefit of faster execution might be offset by a much slower
+       compilation time.  Most (but not all) patterns can be optimized by  the
        JIT compiler.
 
 
@@ -2264,48 +2274,48 @@ LOCALE SUPPORT
        void pcre2_maketables_free(pcre2_general_context *gcontext,
          const uint8_t *tables);
 
-       PCRE2 handles caseless matching, and determines whether characters  are
-       letters,  digits, or whatever, by reference to a set of tables, indexed
+       PCRE2  handles caseless matching, and determines whether characters are
+       letters, digits, or whatever, by reference to a set of tables,  indexed
        by character code point. However, this applies only to characters whose
-       code points are less than 256. By default,  higher-valued  code  points
+       code  points  are  less than 256. By default, higher-valued code points
        never match escapes such as \w or \d.
 
        When PCRE2 is built with Unicode support (the default), certain Unicode
-       character  properties  can be tested with \p and \P, or, alternatively,
+       character properties can be tested with \p and \P,  or,  alternatively,
        the PCRE2_UCP option can be set when a pattern is compiled; this causes
-       \w and friends to use Unicode property support instead of the  built-in
+       \w  and friends to use Unicode property support instead of the built-in
        tables.  PCRE2_UCP also causes upper/lower casing operations on charac-
        ters with code points greater than 127 to use Unicode properties. These
-       effects  apply even when PCRE2_UTF is not set. There are, however, some
-       PCRE2_EXTRA options (see above) that can be used to modify or  suppress
+       effects apply even when PCRE2_UTF is not set. There are, however,  some
+       PCRE2_EXTRA  options (see above) that can be used to modify or suppress
        them.
 
-       The  use  of  locales  with Unicode is discouraged. If you are handling
-       characters with code points greater than 127,  you  should  either  use
+       The use of locales with Unicode is discouraged.  If  you  are  handling
+       characters  with  code  points  greater than 127, you should either use
        Unicode support, or use locales, but not try to mix the two.
 
-       PCRE2  contains a built-in set of character tables that are used by de-
-       fault.  These are sufficient for many applications. Normally,  the  in-
-       ternal  tables  recognize only ASCII characters. However, when PCRE2 is
+       PCRE2 contains a built-in set of character tables that are used by  de-
+       fault.   These  are sufficient for many applications. Normally, the in-
+       ternal tables recognize only ASCII characters. However, when  PCRE2  is
        built, it is possible to cause the internal tables to be rebuilt in the
        default "C" locale of the local system, which may cause them to be dif-
        ferent.
 
-       The built-in tables can be overridden by tables supplied by the  appli-
-       cation  that  calls  PCRE2.  These may be created in a different locale
-       from the default.  As more and more applications change to  using  Uni-
+       The  built-in tables can be overridden by tables supplied by the appli-
+       cation that calls PCRE2. These may be created  in  a  different  locale
+       from  the  default.  As more and more applications change to using Uni-
        code, the need for this locale support is expected to die away.
 
-       External  tables  are built by calling the pcre2_maketables() function,
+       External tables are built by calling the  pcre2_maketables()  function,
        in the relevant locale. The only argument to this function is a general
-       context, which can be used to pass a custom memory  allocator.  If  the
+       context,  which  can  be used to pass a custom memory allocator. If the
        argument is NULL, the system malloc() is used. The result can be passed
        to pcre2_compile() as often as necessary, by creating a compile context
-       and  calling  pcre2_set_character_tables()  to  set  the tables pointer
+       and calling pcre2_set_character_tables()  to  set  the  tables  pointer
        therein.
 
-       For example, to build and use  tables  that  are  appropriate  for  the
-       French  locale  (where accented characters with values greater than 127
+       For  example,  to  build  and  use  tables that are appropriate for the
+       French locale (where accented characters with values greater  than  127
        are treated as letters), the following code could be used:
 
          setlocale(LC_CTYPE, "fr_FR");
@@ -2314,31 +2324,31 @@ LOCALE SUPPORT
          pcre2_set_character_tables(ccontext, tables);
          re = pcre2_compile(..., ccontext);
 
-       The locale name "fr_FR" is used on Linux and other  Unix-like  systems;
+       The  locale  name "fr_FR" is used on Linux and other Unix-like systems;
        if you are using Windows, the name for the French locale is "french".
 
        The pointer that is passed (via the compile context) to pcre2_compile()
        is saved with the compiled pattern, and the same tables are used by the
-       matching  functions.  Thus,  for  any  single  pattern, compilation and
-       matching both happen in the same locale, but different patterns can  be
+       matching functions. Thus,  for  any  single  pattern,  compilation  and
+       matching  both happen in the same locale, but different patterns can be
        processed in different locales.
 
-       It  is the caller's responsibility to ensure that the memory containing
+       It is the caller's responsibility to ensure that the memory  containing
        the tables remains available while they are still in use. When they are
-       no longer needed, you can discard them  using  pcre2_maketables_free(),
-       which  should  pass as its first parameter the same global context that
+       no  longer  needed, you can discard them using pcre2_maketables_free(),
+       which should pass as its first parameter the same global  context  that
        was used to create the tables.
 
    Saving locale tables
 
-       The tables described above are just a sequence of binary  bytes,  which
-       makes  them  independent of hardware characteristics such as endianness
-       or whether the processor is 32-bit or 64-bit. A copy of the  result  of
-       pcre2_maketables()  can  therefore  be saved in a file or elsewhere and
-       re-used later, even in a different program or on another computer.  The
-       size  of  the  tables  (number  of  bytes)  must be obtained by calling
-       pcre2_config()  with  the  PCRE2_CONFIG_TABLES_LENGTH  option   because
-       pcre2_maketables()   does   not   return  this  value.  Note  that  the
+       The  tables  described above are just a sequence of binary bytes, which
+       makes them independent of hardware characteristics such  as  endianness
+       or  whether  the processor is 32-bit or 64-bit. A copy of the result of
+       pcre2_maketables() can therefore be saved in a file  or  elsewhere  and
+       re-used  later, even in a different program or on another computer. The
+       size of the tables (number  of  bytes)  must  be  obtained  by  calling
+       pcre2_config()   with  the  PCRE2_CONFIG_TABLES_LENGTH  option  because
+       pcre2_maketables()  does  not  return  this  value.   Note   that   the
        pcre2_dftables program, which is part of the PCRE2 build system, can be
        used stand-alone to create a file that contains a set of binary tables.
        See the pcre2build documentation for details.
@@ -2348,13 +2358,13 @@ INFORMATION ABOUT A COMPILED PATTERN
 
        int pcre2_pattern_info(const pcre2 *code, uint32_t what, void *where);
 
-       The pcre2_pattern_info() function returns general information  about  a
+       The  pcre2_pattern_info()  function returns general information about a
        compiled pattern. For information about callouts, see the next section.
-       The  first  argument  for pcre2_pattern_info() is a pointer to the com-
+       The first argument for pcre2_pattern_info() is a pointer  to  the  com-
        piled pattern. The second argument specifies which piece of information
-       is required, and the third argument is a pointer to a variable  to  re-
-       ceive  the  data.  If the third argument is NULL, the first argument is
-       ignored, and the function returns the size in  bytes  of  the  variable
+       is  required,  and the third argument is a pointer to a variable to re-
+       ceive the data. If the third argument is NULL, the  first  argument  is
+       ignored,  and  the  function  returns the size in bytes of the variable
        that is required for the information requested. Otherwise, the yield of
        the function is zero for success, or one of the following negative num-
        bers:
@@ -2365,8 +2375,8 @@ INFORMATION ABOUT A COMPILED PATTERN
          PCRE2_ERROR_UNSET          the requested field is not set
 
        The "magic number" is placed at the start of each compiled pattern as a
-       simple  check  against  passing  an arbitrary memory pointer. Here is a
-       typical call of pcre2_pattern_info(), to obtain the length of the  com-
+       simple check against passing an arbitrary memory  pointer.  Here  is  a
+       typical  call of pcre2_pattern_info(), to obtain the length of the com-
        piled pattern:
 
          int rc;
@@ -2384,22 +2394,22 @@ INFORMATION ABOUT A COMPILED PATTERN
          PCRE2_INFO_EXTRAOPTIONS
 
        Return copies of the pattern's options. The third argument should point
-       to  a  uint32_t variable. PCRE2_INFO_ARGOPTIONS returns exactly the op-
-       tions that were passed to  pcre2_compile(),  whereas  PCRE2_INFO_ALLOP-
-       TIONS  returns  the compile options as modified by any top-level (*XXX)
-       option settings such as (*UTF) at the  start  of  the  pattern  itself.
-       PCRE2_INFO_EXTRAOPTIONS  returns the extra options that were set in the
-       compile context by calling the pcre2_set_compile_extra_options()  func-
+       to a uint32_t variable. PCRE2_INFO_ARGOPTIONS returns exactly  the  op-
+       tions  that  were  passed to pcre2_compile(), whereas PCRE2_INFO_ALLOP-
+       TIONS returns the compile options as modified by any  top-level  (*XXX)
+       option  settings  such  as  (*UTF)  at the start of the pattern itself.
+       PCRE2_INFO_EXTRAOPTIONS returns the extra options that were set in  the
+       compile  context by calling the pcre2_set_compile_extra_options() func-
        tion.
 
-       For  example, if the pattern /(*UTF)abc/ is compiled with the PCRE2_EX-
-       TENDED option, the result for PCRE2_INFO_ALLOPTIONS  is  PCRE2_EXTENDED
-       and  PCRE2_UTF.   Option settings such as (?i) that can change within a
+       For example, if the pattern /(*UTF)abc/ is compiled with the  PCRE2_EX-
+       TENDED  option,  the result for PCRE2_INFO_ALLOPTIONS is PCRE2_EXTENDED
+       and PCRE2_UTF.  Option settings such as (?i) that can change  within  a
        pattern do not affect the result of PCRE2_INFO_ALLOPTIONS, even if they
-       appear right at the start of the pattern. (This was different  in  some
+       appear  right  at the start of the pattern. (This was different in some
        earlier releases.)
 
-       A  pattern compiled without PCRE2_ANCHORED is automatically anchored by
+       A pattern compiled without PCRE2_ANCHORED is automatically anchored  by
        PCRE2 if the first significant item in every top-level branch is one of
        the following:
 
@@ -2408,7 +2418,7 @@ INFORMATION ABOUT A COMPILED PATTERN
          \G    always
          .*    sometimes - see below
 
-       When .* is the first significant item, anchoring is possible only  when
+       When  .* is the first significant item, anchoring is possible only when
        all the following are true:
 
          .* is not in an atomic group
@@ -2419,94 +2429,94 @@ INFORMATION ABOUT A COMPILED PATTERN
          PCRE2_NO_DOTSTAR_ANCHOR is not set
          Dotstar anchoring has not been disabled with PCRE2_DOTSTAR_ANCHOR_OFF
 
-       For  patterns  that are auto-anchored, the PCRE2_ANCHORED bit is set in
+       For patterns that are auto-anchored, the PCRE2_ANCHORED bit is  set  in
        the options returned for PCRE2_INFO_ALLOPTIONS.
 
          PCRE2_INFO_BACKREFMAX
 
-       Return the number of the highest  backreference  in  the  pattern.  The
-       third  argument  should  point  to  a  uint32_t variable. Named capture
-       groups acquire numbers as well as names, and these  count  towards  the
-       highest  backreference.  Backreferences  such as \4 or \g{12} match the
+       Return  the  number  of  the  highest backreference in the pattern. The
+       third argument should point  to  a  uint32_t  variable.  Named  capture
+       groups  acquire  numbers  as well as names, and these count towards the
+       highest backreference. Backreferences such as \4 or  \g{12}  match  the
        captured characters of the given group, but in addition, the check that
        a capture group is set in a conditional group such as (?(3)a|b) is also
        a backreference.  Zero is returned if there are no backreferences.
 
          PCRE2_INFO_BSR
 
-       The output is a uint32_t integer whose value indicates  what  character
-       sequences  the \R escape sequence matches. A value of PCRE2_BSR_UNICODE
-       means that \R matches any Unicode line  ending  sequence;  a  value  of
+       The  output  is a uint32_t integer whose value indicates what character
+       sequences the \R escape sequence matches. A value of  PCRE2_BSR_UNICODE
+       means  that  \R  matches  any  Unicode line ending sequence; a value of
        PCRE2_BSR_ANYCRLF means that \R matches only CR, LF, or CRLF.
 
          PCRE2_INFO_CAPTURECOUNT
 
-       Return  the  highest  capture  group number in the pattern. In patterns
+       Return the highest capture group number in  the  pattern.  In  patterns
        where (?| is not used, this is also the total number of capture groups.
        The third argument should point to a uint32_t variable.
 
          PCRE2_INFO_DEPTHLIMIT
 
-       If the pattern set a backtracking depth limit by including an  item  of
-       the  form  (*LIMIT_DEPTH=nnnn) at the start, the value is returned. The
+       If  the  pattern set a backtracking depth limit by including an item of
+       the form (*LIMIT_DEPTH=nnnn) at the start, the value is  returned.  The
        third argument should point to a uint32_t integer. If no such value has
-       been set, the call to pcre2_pattern_info() returns the error  PCRE2_ER-
+       been  set, the call to pcre2_pattern_info() returns the error PCRE2_ER-
        ROR_UNSET. Note that this limit will only be used during matching if it
-       is  less  than  the  limit  set or defaulted by the caller of the match
+       is less than the limit set or defaulted by  the  caller  of  the  match
        function.
 
          PCRE2_INFO_FIRSTBITMAP
 
-       In the absence of a single first code unit for a non-anchored  pattern,
-       pcre2_compile()  may construct a 256-bit table that defines a fixed set
-       of values for the first code unit in any match. For example, a  pattern
-       that  starts  with  [abc]  results in a table with three bits set. When
-       code unit values greater than 255 are supported, the flag bit  for  255
-       means  "any  code unit of value 255 or above". If such a table was con-
-       structed, a pointer to it is returned. Otherwise NULL is returned.  The
+       In  the absence of a single first code unit for a non-anchored pattern,
+       pcre2_compile() may construct a 256-bit table that defines a fixed  set
+       of  values for the first code unit in any match. For example, a pattern
+       that starts with [abc] results in a table with  three  bits  set.  When
+       code  unit  values greater than 255 are supported, the flag bit for 255
+       means "any code unit of value 255 or above". If such a table  was  con-
+       structed,  a pointer to it is returned. Otherwise NULL is returned. The
        third argument should point to a const uint8_t * variable.
 
          PCRE2_INFO_FIRSTCODETYPE
 
        Return information about the first code unit of any matched string, for
-       a  non-anchored  pattern. The third argument should point to a uint32_t
-       variable. If there is a fixed first value, for example, the letter  "c"
-       from  a  pattern such as (cat|cow|coyote), 1 is returned, and the value
-       can be retrieved using PCRE2_INFO_FIRSTCODEUNIT. If there is  no  fixed
-       first  value,  but it is known that a match can occur only at the start
-       of the subject or following a newline in the subject,  2  is  returned.
+       a non-anchored pattern. The third argument should point to  a  uint32_t
+       variable.  If there is a fixed first value, for example, the letter "c"
+       from a pattern such as (cat|cow|coyote), 1 is returned, and  the  value
+       can  be  retrieved using PCRE2_INFO_FIRSTCODEUNIT. If there is no fixed
+       first value, but it is known that a match can occur only at  the  start
+       of  the  subject  or following a newline in the subject, 2 is returned.
        Otherwise, and for anchored patterns, 0 is returned.
 
          PCRE2_INFO_FIRSTCODEUNIT
 
-       Return  the  value  of  the first code unit of any matched string for a
-       pattern where PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise  return  0.
-       The  third  argument  should point to a uint32_t variable. In the 8-bit
-       library, the value is always less than 256. In the 16-bit  library  the
-       value  can  be  up  to 0xffff. In the 32-bit library in UTF-32 mode the
+       Return the value of the first code unit of any  matched  string  for  a
+       pattern  where  PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise return 0.
+       The third argument should point to a uint32_t variable.  In  the  8-bit
+       library,  the  value is always less than 256. In the 16-bit library the
+       value can be up to 0xffff. In the 32-bit library  in  UTF-32  mode  the
        value can be up to 0x10ffff, and up to 0xffffffff when not using UTF-32
        mode.
 
          PCRE2_INFO_FRAMESIZE
 
        Return the size (in bytes) of the data frames that are used to remember
-       backtracking positions when the pattern is processed  by  pcre2_match()
-       without  the  use  of  JIT. The third argument should point to a size_t
+       backtracking  positions  when the pattern is processed by pcre2_match()
+       without the use of JIT. The third argument should  point  to  a  size_t
        variable. The frame size depends on the number of capturing parentheses
        in the pattern. Each additional capture group adds two PCRE2_SIZE vari-
        ables.
 
          PCRE2_INFO_HASBACKSLASHC
 
-       Return 1 if the pattern contains any instances of \C, otherwise 0.  The
+       Return  1 if the pattern contains any instances of \C, otherwise 0. The
        third argument should point to a uint32_t variable.
 
          PCRE2_INFO_HASCRORLF
 
-       Return  1  if  the  pattern  contains any explicit matches for CR or LF
-       characters, otherwise 0. The third argument should point to a  uint32_t
-       variable.  An explicit match is either a literal CR or LF character, or
-       \r or \n or one of the  equivalent  hexadecimal  or  octal  escape  se-
+       Return 1 if the pattern contains any explicit  matches  for  CR  or  LF
+       characters,  otherwise 0. The third argument should point to a uint32_t
+       variable. An explicit match is either a literal CR or LF character,  or
+       \r  or  \n  or  one  of  the equivalent hexadecimal or octal escape se-
        quences.
 
          PCRE2_INFO_HEAPLIMIT
@@ -2514,45 +2524,45 @@ INFORMATION ABOUT A COMPILED PATTERN
        If the pattern set a heap memory limit by including an item of the form
        (*LIMIT_HEAP=nnnn) at the start, the value is returned. The third argu-
        ment should point to a uint32_t integer. If no such value has been set,
-       the  call  to pcre2_pattern_info() returns the error PCRE2_ERROR_UNSET.
-       Note that this limit will only be used during matching if  it  is  less
+       the call to pcre2_pattern_info() returns the  error  PCRE2_ERROR_UNSET.
+       Note  that  this  limit will only be used during matching if it is less
        than the limit set or defaulted by the caller of the match function.
 
          PCRE2_INFO_JCHANGED
 
-       Return  1  if  the (?J) or (?-J) option setting is used in the pattern,
-       otherwise 0. The third argument should point to  a  uint32_t  variable.
-       (?J)  and  (?-J) set and unset the local PCRE2_DUPNAMES option, respec-
+       Return 1 if the (?J) or (?-J) option setting is used  in  the  pattern,
+       otherwise  0.  The  third argument should point to a uint32_t variable.
+       (?J) and (?-J) set and unset the local PCRE2_DUPNAMES  option,  respec-
        tively.
 
          PCRE2_INFO_JITSIZE
 
-       If the compiled pattern was successfully  processed  by  pcre2_jit_com-
-       pile(),  return  the  size  of  the JIT compiled code, otherwise return
+       If  the  compiled  pattern was successfully processed by pcre2_jit_com-
+       pile(), return the size of the  JIT  compiled  code,  otherwise  return
        zero. The third argument should point to a size_t variable.
 
          PCRE2_INFO_LASTCODETYPE
 
-       Returns 1 if there is a rightmost literal code unit that must exist  in
-       any  matched string, other than at its start. The third argument should
+       Returns  1 if there is a rightmost literal code unit that must exist in
+       any matched string, other than at its start. The third argument  should
        point to a uint32_t variable. If there is no such value, 0 is returned.
-       When 1 is returned, the code unit value itself can be  retrieved  using
+       When  1  is returned, the code unit value itself can be retrieved using
        PCRE2_INFO_LASTCODEUNIT. For anchored patterns, a last literal value is
-       recorded  only if it follows something of variable length. For example,
-       for the pattern /^a\d+z\d+/ the returned value is 1 (with "z"  returned
-       from  PCRE2_INFO_LASTCODEUNIT), but for /^a\dz\d/ the returned value is
+       recorded only if it follows something of variable length. For  example,
+       for  the pattern /^a\d+z\d+/ the returned value is 1 (with "z" returned
+       from PCRE2_INFO_LASTCODEUNIT), but for /^a\dz\d/ the returned value  is
        0.
 
          PCRE2_INFO_LASTCODEUNIT
 
-       Return the value of the rightmost literal code unit that must exist  in
-       any  matched  string,  other  than  at  its  start, for a pattern where
+       Return  the value of the rightmost literal code unit that must exist in
+       any matched string, other than  at  its  start,  for  a  pattern  where
        PCRE2_INFO_LASTCODETYPE returns 1. Otherwise, return 0. The third argu-
        ment should point to a uint32_t variable.
 
          PCRE2_INFO_MATCHEMPTY
 
-       Return 1 if the pattern might match an empty string, otherwise  0.  The
+       Return  1  if the pattern might match an empty string, otherwise 0. The
        third argument should point to a uint32_t variable. When a pattern con-
        tains recursive subroutine calls it is not always possible to determine
        whether or not it can match an empty string. PCRE2 takes a cautious ap-
@@ -2560,44 +2570,44 @@ INFORMATION ABOUT A COMPILED PATTERN
 
          PCRE2_INFO_MATCHLIMIT
 
-       If  the  pattern  set  a  match  limit by including an item of the form
-       (*LIMIT_MATCH=nnnn) at the start, the value is returned. The third  ar-
-       gument  should  point  to a uint32_t integer. If no such value has been
+       If the pattern set a match limit by  including  an  item  of  the  form
+       (*LIMIT_MATCH=nnnn)  at the start, the value is returned. The third ar-
+       gument should point to a uint32_t integer. If no such  value  has  been
        set, the call to pcre2_pattern_info() returns the error PCRE2_ERROR_UN-
-       SET. Note that this limit will only be used during matching  if  it  is
-       less  than  the limit set or defaulted by the caller of the match func-
+       SET.  Note  that  this limit will only be used during matching if it is
+       less than the limit set or defaulted by the caller of the  match  func-
        tion.
 
          PCRE2_INFO_MAXLOOKBEHIND
 
-       A lookbehind assertion moves back a certain number of  characters  (not
-       code  units)  when  it starts to process each of its branches. This re-
-       quest returns the largest of these backward moves. The  third  argument
+       A  lookbehind  assertion moves back a certain number of characters (not
+       code units) when it starts to process each of its  branches.  This  re-
+       quest  returns  the largest of these backward moves. The third argument
        should point to a uint32_t integer. The simple assertions \b and \B re-
-       quire  a one-character lookbehind and cause PCRE2_INFO_MAXLOOKBEHIND to
-       return 1 in the absence of anything longer. \A also  registers  a  one-
-       character  lookbehind, though it does not actually inspect the previous
+       quire a one-character lookbehind and cause PCRE2_INFO_MAXLOOKBEHIND  to
+       return  1  in  the absence of anything longer. \A also registers a one-
+       character lookbehind, though it does not actually inspect the  previous
        character.
 
        Note that this information is useful for multi-segment matching only if
-       the pattern contains no nested lookbehinds. For  example,  the  pattern
-       (?<=a(?<=ba)c)  returns  a  maximum  lookbehind  of  2,  but when it is
-       processed, the first lookbehind moves back by two  characters,  matches
-       one  character, then the nested lookbehind also moves back by two char-
-       acters. This puts the matching point three characters earlier  than  it
-       was  at the start.  PCRE2_INFO_MAXLOOKBEHIND is really only useful as a
-       debugging tool. See the pcre2partial documentation for a discussion  of
+       the  pattern  contains  no nested lookbehinds. For example, the pattern
+       (?<=a(?<=ba)c) returns a maximum  lookbehind  of  2,  but  when  it  is
+       processed,  the  first lookbehind moves back by two characters, matches
+       one character, then the nested lookbehind also moves back by two  char-
+       acters.  This  puts the matching point three characters earlier than it
+       was at the start.  PCRE2_INFO_MAXLOOKBEHIND is really only useful as  a
+       debugging  tool. See the pcre2partial documentation for a discussion of
        multi-segment matching.
 
          PCRE2_INFO_MINLENGTH
 
-       If  a  minimum  length  for  matching subject strings was computed, its
+       If a minimum length for matching  subject  strings  was  computed,  its
        value is returned. Otherwise the returned value is 0. This value is not
-       computed when PCRE2_NO_START_OPTIMIZE is set. The value is a number  of
-       characters,  which in UTF mode may be different from the number of code
-       units. The third argument should point  to  a  uint32_t  variable.  The
-       value  is a lower bound to the length of any matching string. There may
-       not be any strings of that length that do  actually  match,  but  every
+       computed  when PCRE2_NO_START_OPTIMIZE is set. The value is a number of
+       characters, which in UTF mode may be different from the number of  code
+       units.  The  third  argument  should  point to a uint32_t variable. The
+       value is a lower bound to the length of any matching string. There  may
+       not  be  any  strings  of that length that do actually match, but every
        string that does match is at least that long.
 
          PCRE2_INFO_NAMECOUNT
@@ -2605,51 +2615,51 @@ INFORMATION ABOUT A COMPILED PATTERN
          PCRE2_INFO_NAMETABLE
 
        PCRE2 supports the use of named as well as numbered capturing parenthe-
-       ses.  The names are just an additional way of identifying the parenthe-
+       ses. The names are just an additional way of identifying the  parenthe-
        ses, which still acquire numbers. Several convenience functions such as
-       pcre2_substring_get_byname() are provided for extracting captured  sub-
-       strings  by  name. It is also possible to extract the data directly, by
-       first converting the name to a number in order to  access  the  correct
-       pointers  in the output vector (described with pcre2_match() below). To
+       pcre2_substring_get_byname()  are provided for extracting captured sub-
+       strings by name. It is also possible to extract the data  directly,  by
+       first  converting  the  name to a number in order to access the correct
+       pointers in the output vector (described with pcre2_match() below).  To
        do the conversion, you need to use the name-to-number map, which is de-
        scribed by these three values.
 
-       The map consists of a number of  fixed-size  entries.  PCRE2_INFO_NAME-
-       COUNT  gives  the number of entries, and PCRE2_INFO_NAMEENTRYSIZE gives
-       the size of each entry in code units; both of these return  a  uint32_t
+       The  map  consists  of a number of fixed-size entries. PCRE2_INFO_NAME-
+       COUNT gives the number of entries, and  PCRE2_INFO_NAMEENTRYSIZE  gives
+       the  size  of each entry in code units; both of these return a uint32_t
        value. The entry size depends on the length of the longest name.
 
        PCRE2_INFO_NAMETABLE returns a pointer to the first entry of the table.
        This is a PCRE2_SPTR pointer to a block of code units. In the 8-bit li-
-       brary,  the first two bytes of each entry are the number of the captur-
-       ing parenthesis, most significant byte first. In  the  16-bit  library,
-       the  pointer  points  to 16-bit code units, the first of which contains
-       the parenthesis number. In the 32-bit library, the  pointer  points  to
-       32-bit  code units, the first of which contains the parenthesis number.
+       brary, the first two bytes of each entry are the number of the  captur-
+       ing  parenthesis,  most  significant byte first. In the 16-bit library,
+       the pointer points to 16-bit code units, the first  of  which  contains
+       the  parenthesis  number.  In the 32-bit library, the pointer points to
+       32-bit code units, the first of which contains the parenthesis  number.
        The rest of the entry is the corresponding name, zero terminated.
 
-       The names are in alphabetical order. If (?| is used to create  multiple
+       The  names are in alphabetical order. If (?| is used to create multiple
        capture groups with the same number, as described in the section on du-
        plicate group numbers in the pcre2pattern page, the groups may be given
-       the  same  name,  but  there  is only one entry in the table. Different
+       the same name, but there is only one  entry  in  the  table.  Different
        names for groups of the same number are not permitted.
 
-       Duplicate names for capture groups with different numbers  are  permit-
+       Duplicate  names  for capture groups with different numbers are permit-
        ted, but only if PCRE2_DUPNAMES is set. They appear in the table in the
-       order  in  which  they were found in the pattern. In the absence of (?|
-       this is the order of increasing number; when (?| is used  this  is  not
-       necessarily  the  case because later capture groups may have lower num-
+       order in which they were found in the pattern. In the  absence  of  (?|
+       this  is  the  order of increasing number; when (?| is used this is not
+       necessarily the case because later capture groups may have  lower  num-
        bers.
 
-       As a simple example of the name/number table,  consider  the  following
-       pattern  after  compilation by the 8-bit library (assume PCRE2_EXTENDED
+       As  a  simple  example of the name/number table, consider the following
+       pattern after compilation by the 8-bit library  (assume  PCRE2_EXTENDED
        is set, so white space - including newlines - is ignored):
 
          (?<date> (?<year>(\d\d)?\d\d) -
          (?<month>\d\d) - (?<day>\d\d) )
 
        There are four named capture groups, so the table has four entries, and
-       each entry in the table is eight bytes long. The table is  as  follows,
+       each  entry  in the table is eight bytes long. The table is as follows,
        with non-printing bytes shows in hexadecimal, and undefined bytes shown
        as ??:
 
@@ -2658,8 +2668,8 @@ INFORMATION ABOUT A COMPILED PATTERN
          00 04 m  o  n  t  h  00
          00 02 y  e  a  r  00 ??
 
-       When  writing  code to extract data from named capture groups using the
-       name-to-number map, remember that the length of the entries  is  likely
+       When writing code to extract data from named capture groups  using  the
+       name-to-number  map,  remember that the length of the entries is likely
        to be different for each compiled pattern.
 
          PCRE2_INFO_NEWLINE
@@ -2678,14 +2688,14 @@ INFORMATION ABOUT A COMPILED PATTERN
 
          PCRE2_INFO_SIZE
 
-       Return  the  size  of  the compiled pattern in bytes (for all three li-
-       braries). The third argument should point to a  size_t  variable.  This
-       value  includes  the  size  of the general data block that precedes the
-       code units of the compiled pattern itself. The value that is used  when
-       pcre2_compile()  is  getting memory in which to place the compiled pat-
+       Return the size of the compiled pattern in bytes  (for  all  three  li-
+       braries).  The  third  argument should point to a size_t variable. This
+       value includes the size of the general data  block  that  precedes  the
+       code  units of the compiled pattern itself. The value that is used when
+       pcre2_compile() is getting memory in which to place the  compiled  pat-
        tern may be slightly larger than the value returned by this option, be-
-       cause there are cases where the code that calculates the  size  has  to
-       over-estimate.  Processing a pattern with the JIT compiler does not al-
+       cause  there  are  cases where the code that calculates the size has to
+       over-estimate. Processing a pattern with the JIT compiler does not  al-
        ter the value returned by this option.
 
 
@@ -2696,30 +2706,30 @@ INFORMATION ABOUT A PATTERN'S CALLOUTS
          void *user_data);
 
        A script language that supports the use of string arguments in callouts
-       might like to scan all the callouts in a  pattern  before  running  the
+       might  like  to  scan  all the callouts in a pattern before running the
        match. This can be done by calling pcre2_callout_enumerate(). The first
-       argument  is  a  pointer  to a compiled pattern, the second points to a
-       callback function, and the third is arbitrary user data.  The  callback
-       function  is  called  for  every callout in the pattern in the order in
+       argument is a pointer to a compiled pattern, the  second  points  to  a
+       callback  function,  and the third is arbitrary user data. The callback
+       function is called for every callout in the pattern  in  the  order  in
        which they appear. Its first argument is a pointer to a callout enumer-
-       ation block, and its second argument is the user_data  value  that  was
-       passed  to  pcre2_callout_enumerate(). The contents of the callout enu-
-       meration block are described in the pcre2callout  documentation,  which
+       ation  block,  and  its second argument is the user_data value that was
+       passed to pcre2_callout_enumerate(). The contents of the  callout  enu-
+       meration  block  are described in the pcre2callout documentation, which
        also gives further details about callouts.
 
 
 SERIALIZATION AND PRECOMPILING
 
-       It  is possible to save compiled patterns on disc or elsewhere, and re-
+       It is possible to save compiled patterns on disc or elsewhere, and  re-
        load them later, subject to a number of restrictions. The host on which
-       the patterns are reloaded must be running the same  version  of  PCRE2,
-       with  the same code unit width, and must also have the same endianness,
-       pointer width, and PCRE2_SIZE type. Before  compiled  patterns  can  be
+       the  patterns  are  reloaded must be running the same version of PCRE2,
+       with the same code unit width, and must also have the same  endianness,
+       pointer  width,  and  PCRE2_SIZE  type. Before compiled patterns can be
        saved, they must be converted to a "serialized" form, which in the case
        of PCRE2 is really just a bytecode dump.  The functions whose names be-
        gin with pcre2_serialize_ are used for converting to and from the seri-
-       alized  form.  They  are described in the pcre2serialize documentation.
-       Note that PCRE2 serialization does not convert compiled patterns to  an
+       alized form. They are described in  the  pcre2serialize  documentation.
+       Note  that PCRE2 serialization does not convert compiled patterns to an
        abstract format like Java or .NET serialization.
 
 
@@ -2733,70 +2743,70 @@ THE MATCH DATA BLOCK
 
        void pcre2_match_data_free(pcre2_match_data *match_data);
 
-       Information  about  a  successful  or unsuccessful match is placed in a
-       match data block, which is an opaque  structure  that  is  accessed  by
-       function  calls.  In particular, the match data block contains a vector
+       Information about a successful or unsuccessful match  is  placed  in  a
+       match  data  block,  which  is  an opaque structure that is accessed by
+       function calls. In particular, the match data block contains  a  vector
        of offsets into the subject string that define the matched parts of the
        subject. This is known as the ovector.
 
-       Before calling pcre2_match(), pcre2_dfa_match(),  or  pcre2_jit_match()
+       Before  calling  pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()
        you must create a match data block by calling one of the creation func-
-       tions  above.  For pcre2_match_data_create(), the first argument is the
+       tions above. For pcre2_match_data_create(), the first argument  is  the
        number of pairs of offsets in the ovector.
 
-       When using pcre2_match(), one pair of offsets is required  to  identify
-       the  string that matched the whole pattern, with an additional pair for
+       When  using  pcre2_match(), one pair of offsets is required to identify
+       the string that matched the whole pattern, with an additional pair  for
        each captured substring. For example, a value of 4 creates enough space
-       to record the matched portion of the subject plus three  captured  sub-
+       to  record  the matched portion of the subject plus three captured sub-
        strings.
 
-       When  using  pcre2_dfa_match() there may be multiple matched substrings
-       of different lengths at the same point  in  the  subject.  The  ovector
+       When using pcre2_dfa_match() there may be multiple  matched  substrings
+       of  different  lengths  at  the  same point in the subject. The ovector
        should be made large enough to hold as many as are expected.
 
-       A  minimum  of at least 1 pair is imposed by pcre2_match_data_create(),
-       so it is always possible to return the overall matched  string  in  the
-       case   of   pcre2_match()   or   the  longest  match  in  the  case  of
-       pcre2_dfa_match(). The maximum number of pairs is 65535; if  the  first
-       argument  of  pcre2_match_data_create()  is greater than this, 65535 is
+       A minimum of at least 1 pair is imposed  by  pcre2_match_data_create(),
+       so  it  is  always possible to return the overall matched string in the
+       case  of  pcre2_match()  or  the  longest  match   in   the   case   of
+       pcre2_dfa_match().  The  maximum number of pairs is 65535; if the first
+       argument of pcre2_match_data_create() is greater than  this,  65535  is
        used.
 
        The second argument of pcre2_match_data_create() is a pointer to a gen-
-       eral context, which can specify custom memory management for  obtaining
+       eral  context, which can specify custom memory management for obtaining
        the memory for the match data block. If you are not using custom memory
        management, pass NULL, which causes malloc() to be used.
 
-       For  pcre2_match_data_create_from_pattern(),  the  first  argument is a
+       For pcre2_match_data_create_from_pattern(), the  first  argument  is  a
        pointer to a compiled pattern. The ovector is created to be exactly the
-       right size to hold all the substrings  a  pattern  might  capture  when
+       right  size  to  hold  all  the substrings a pattern might capture when
        matched using pcre2_match(). You should not use this call when matching
-       with  pcre2_dfa_match().  The  second  argument is again a pointer to a
-       general context, but in this case if NULL is passed, the memory is  ob-
-       tained  using the same allocator that was used for the compiled pattern
+       with pcre2_dfa_match(). The second argument is again  a  pointer  to  a
+       general  context, but in this case if NULL is passed, the memory is ob-
+       tained using the same allocator that was used for the compiled  pattern
        (custom or default).
 
-       A match data block can be used many times, with the same  or  different
-       compiled  patterns. You can extract information from a match data block
-       after a match operation has finished,  using  functions  that  are  de-
+       A  match  data block can be used many times, with the same or different
+       compiled patterns. You can extract information from a match data  block
+       after  a  match  operation  has  finished, using functions that are de-
        scribed in the sections on matched strings and other match data below.
 
-       When  a  call  of  pcre2_match()  fails, valid data is available in the
-       match block only  when  the  error  is  PCRE2_ERROR_NOMATCH,  PCRE2_ER-
-       ROR_PARTIAL,  or  one of the error codes for an invalid UTF string. Ex-
+       When a call of pcre2_match() fails, valid  data  is  available  in  the
+       match  block  only  when  the  error  is PCRE2_ERROR_NOMATCH, PCRE2_ER-
+       ROR_PARTIAL, or one of the error codes for an invalid UTF  string.  Ex-
        actly what is available depends on the error, and is detailed below.
 
-       When one of the matching functions is called, pointers to the  compiled
-       pattern  and the subject string are set in the match data block so that
-       they can be referenced by the extraction functions after  a  successful
+       When  one of the matching functions is called, pointers to the compiled
+       pattern and the subject string are set in the match data block so  that
+       they  can  be referenced by the extraction functions after a successful
        match. After running a match, you must not free a compiled pattern or a
-       subject  string until after all operations on the match data block (for
-       that match) have taken place,  unless,  in  the  case  of  the  subject
-       string,  you  have used the PCRE2_COPY_MATCHED_SUBJECT option, which is
-       described in the section entitled "Option bits for  pcre2_match()"  be-
+       subject string until after all operations on the match data block  (for
+       that  match)  have  taken  place,  unless,  in  the case of the subject
+       string, you have used the PCRE2_COPY_MATCHED_SUBJECT option,  which  is
+       described  in  the section entitled "Option bits for pcre2_match()" be-
        low.
 
-       When  a match data block itself is no longer needed, it should be freed
-       by calling pcre2_match_data_free(). If this function is called  with  a
+       When a match data block itself is no longer needed, it should be  freed
+       by  calling  pcre2_match_data_free(). If this function is called with a
        NULL argument, it returns immediately, without doing anything.
 
 
@@ -2807,27 +2817,27 @@ MEMORY USE FOR MATCH DATA BLOCKS
        PCRE2_SIZE pcre2_get_match_data_heapframes_size(
          pcre2_match_data *match_data);
 
-       The  size of a match data block depends on the size of the ovector that
+       The size of a match data block depends on the size of the ovector  that
        it contains. The function pcre2_get_match_data_size() returns the size,
        in bytes, of the block that is its argument.
 
        When pcre2_match() runs interpretively (that is, without using JIT), it
        makes use of a vector of data frames for remembering backtracking posi-
        tions.  The size of each individual frame depends on the number of cap-
-       turing parentheses in the  pattern  and  can  be  obtained  by  calling
+       turing  parentheses  in  the  pattern  and  can  be obtained by calling
        pcre2_pattern_info() with the PCRE2_INFO_FRAMESIZE option (see the sec-
        tion entitled "Information about a compiled pattern" above).
 
-       Heap  memory is used for the frames vector; if the initial memory block
-       turns out to be too small during  matching,  it  is  automatically  ex-
-       panded.  When  pcre2_match()  returns, the memory is not freed, but re-
-       mains attached to the match data  block,  for  use  by  any  subsequent
-       matches  that  use  the  same block. It is automatically freed when the
+       Heap memory is used for the frames vector; if the initial memory  block
+       turns  out  to  be  too  small during matching, it is automatically ex-
+       panded. When pcre2_match() returns, the memory is not  freed,  but  re-
+       mains  attached  to  the  match  data  block, for use by any subsequent
+       matches that use the same block. It is  automatically  freed  when  the
        match data block itself is freed.
 
-       You can find the current size of the frames vector that  a  match  data
-       block  owns  by  calling  pcre2_get_match_data_heapframes_size(). For a
-       newly created match data block the size will be  zero.  Some  types  of
+       You  can  find  the current size of the frames vector that a match data
+       block owns by  calling  pcre2_get_match_data_heapframes_size().  For  a
+       newly  created  match  data  block the size will be zero. Some types of
        match may require a lot of frames and thus a large vector; applications
        that run in environments where memory is constrained can check this and
        free the match data block if the heap frames vector has become too big.
@@ -2840,15 +2850,15 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
          uint32_t options, pcre2_match_data *match_data,
          pcre2_match_context *mcontext);
 
-       The  function pcre2_match() is called to match a subject string against
-       a compiled pattern, which is passed in the code argument. You can  call
+       The function pcre2_match() is called to match a subject string  against
+       a  compiled pattern, which is passed in the code argument. You can call
        pcre2_match() with the same code argument as many times as you like, in
-       order  to  find multiple matches in the subject string or to match dif-
+       order to find multiple matches in the subject string or to  match  dif-
        ferent subject strings with the same pattern.
 
-       This function is the main matching facility of the library, and it  op-
-       erates  in  a Perl-like manner. For specialist use there is also an al-
-       ternative matching function, which is described below  in  the  section
+       This  function is the main matching facility of the library, and it op-
+       erates in a Perl-like manner. For specialist use there is also  an  al-
+       ternative  matching  function,  which is described below in the section
        about the pcre2_dfa_match() function.
 
        Here is an example of a simple call to pcre2_match():
@@ -2863,231 +2873,231 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
            md,             /* the match data block */
            NULL);          /* a match context; NULL means use defaults */
 
-       If  the  subject  string is zero-terminated, the length can be given as
+       If the subject string is zero-terminated, the length can  be  given  as
        PCRE2_ZERO_TERMINATED. A match context must be provided if certain less
        common matching parameters are to be changed. For details, see the sec-
        tion on the match context above.
 
    The string to be matched by pcre2_match()
 
-       The subject string is passed to pcre2_match() as a pointer in  subject,
-       a  length  in  length, and a starting offset in startoffset. The length
-       and offset are in code units, not characters.  That  is,  they  are  in
-       bytes  for the 8-bit library, 16-bit code units for the 16-bit library,
-       and 32-bit code units for the 32-bit library, whether or not  UTF  pro-
+       The  subject string is passed to pcre2_match() as a pointer in subject,
+       a length in length, and a starting offset in  startoffset.  The  length
+       and  offset  are  in  code units, not characters.  That is, they are in
+       bytes for the 8-bit library, 16-bit code units for the 16-bit  library,
+       and  32-bit  code units for the 32-bit library, whether or not UTF pro-
        cessing is enabled. As a special case, if subject is NULL and length is
-       zero,  the  subject is assumed to be an empty string. If length is non-
+       zero, the subject is assumed to be an empty string. If length  is  non-
        zero, an error occurs if subject is NULL.
 
        If startoffset is greater than the length of the subject, pcre2_match()
-       returns PCRE2_ERROR_BADOFFSET. When the starting offset  is  zero,  the
-       search  for a match starts at the beginning of the subject, and this is
+       returns  PCRE2_ERROR_BADOFFSET.  When  the starting offset is zero, the
+       search for a match starts at the beginning of the subject, and this  is
        by far the most common case. In UTF-8 or UTF-16 mode, the starting off-
-       set must point to the start of a character, or to the end of  the  sub-
-       ject  (in  UTF-32 mode, one code unit equals one character, so all off-
-       sets are valid). Like the pattern string, the subject may  contain  bi-
+       set  must  point to the start of a character, or to the end of the sub-
+       ject (in UTF-32 mode, one code unit equals one character, so  all  off-
+       sets  are  valid). Like the pattern string, the subject may contain bi-
        nary zeros.
 
-       A  non-zero  starting offset is useful when searching for another match
-       in the same subject by calling pcre2_match()  again  after  a  previous
-       success.   Setting  startoffset  differs  from passing over a shortened
-       string and setting PCRE2_NOTBOL in the case of a  pattern  that  begins
+       A non-zero starting offset is useful when searching for  another  match
+       in  the  same  subject  by calling pcre2_match() again after a previous
+       success.  Setting startoffset differs from  passing  over  a  shortened
+       string  and  setting  PCRE2_NOTBOL in the case of a pattern that begins
        with any kind of lookbehind. For example, consider the pattern
 
          \Biss\B
 
-       which  finds  occurrences  of "iss" in the middle of words. (\B matches
-       only if the current position in the subject is not  a  word  boundary.)
-       When   applied   to   the   string  "Mississippi"  the  first  call  to
-       pcre2_match() finds the first occurrence. If  pcre2_match()  is  called
+       which finds occurrences of "iss" in the middle of  words.  (\B  matches
+       only  if  the  current position in the subject is not a word boundary.)
+       When  applied  to  the  string  "Mississippi"   the   first   call   to
+       pcre2_match()  finds  the  first occurrence. If pcre2_match() is called
        again with just the remainder of the subject, namely "issippi", it does
-       not  match,  because  \B  is  always false at the start of the subject,
-       which is deemed to be a word boundary.  However,  if  pcre2_match()  is
+       not match, because \B is always false at  the  start  of  the  subject,
+       which  is  deemed  to  be a word boundary. However, if pcre2_match() is
        passed the entire string again, but with startoffset set to 4, it finds
-       the  second  occurrence  of "iss" because it is able to look behind the
+       the second occurrence of "iss" because it is able to  look  behind  the
        starting point to discover that it is preceded by a letter.
 
-       Finding all the matches in a subject is tricky  when  the  pattern  can
+       Finding  all  the  matches  in a subject is tricky when the pattern can
        match an empty string. PCRE2 includes a helper API to assist with this;
-       see  the  section  entitled  "Iterating over all matches" below for de-
+       see the section entitled "Iterating over all  matches"  below  for  de-
        tails.
 
        If a non-zero starting offset is passed when the pattern is anchored, a
        single attempt to match at the given offset is made. This can only suc-
-       ceed if the pattern does not require the match to be at  the  start  of
-       the  subject.  In other words, the anchoring must be the result of set-
-       ting the PCRE2_ANCHORED option or the use of .* with PCRE2_DOTALL,  not
+       ceed  if  the  pattern does not require the match to be at the start of
+       the subject. In other words, the anchoring must be the result  of  set-
+       ting  the PCRE2_ANCHORED option or the use of .* with PCRE2_DOTALL, not
        by starting the pattern with ^ or \A.
 
    Option bits for pcre2_match()
 
        The unused bits of the options argument for pcre2_match() must be zero.
-       The    only    bits    that    may    be    set   are   PCRE2_ANCHORED,
-       PCRE2_COPY_MATCHED_SUBJECT, PCRE2_DISABLE_RECURSELOOP_CHECK,  PCRE2_EN-
-       DANCHORED,       PCRE2_NOTBOL,       PCRE2_NOTEOL,      PCRE2_NOTEMPTY,
+       The   only   bits    that    may    be    set    are    PCRE2_ANCHORED,
+       PCRE2_COPY_MATCHED_SUBJECT,  PCRE2_DISABLE_RECURSELOOP_CHECK, PCRE2_EN-
+       DANCHORED,      PCRE2_NOTBOL,       PCRE2_NOTEOL,       PCRE2_NOTEMPTY,
        PCRE2_NOTEMPTY_ATSTART,  PCRE2_NO_JIT,  PCRE2_NO_UTF_CHECK,  PCRE2_PAR-
        TIAL_HARD, and PCRE2_PARTIAL_SOFT.  Their action is described below.
 
-       Setting  PCRE2_ANCHORED  or PCRE2_ENDANCHORED at match time is not sup-
-       ported by the just-in-time (JIT) compiler. If it is set,  JIT  matching
+       Setting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is  not  sup-
+       ported  by  the just-in-time (JIT) compiler. If it is set, JIT matching
        is  disabled  and  the  interpretive  code  in  pcre2_match()  is  run.
-       PCRE2_DISABLE_RECURSELOOP_CHECK is  ignored  by  JIT,  but  apart  from
-       PCRE2_NO_JIT  (obviously),  the remaining options are supported for JIT
+       PCRE2_DISABLE_RECURSELOOP_CHECK  is  ignored  by  JIT,  but  apart from
+       PCRE2_NO_JIT (obviously), the remaining options are supported  for  JIT
        matching.
 
          PCRE2_ANCHORED
 
        The PCRE2_ANCHORED option limits pcre2_match() to matching at the first
-       matching position. If a pattern was compiled  with  PCRE2_ANCHORED,  or
-       turned  out to be anchored by virtue of its contents, it cannot be made
+       matching  position.  If  a pattern was compiled with PCRE2_ANCHORED, or
+       turned out to be anchored by virtue of its contents, it cannot be  made
        unanchored at matching time. Note that setting the option at match time
        disables JIT matching.
 
          PCRE2_COPY_MATCHED_SUBJECT
 
-       By default, a pointer to the subject is remembered in  the  match  data
-       block  so  that,  after a successful match, it can be referenced by the
-       substring extraction functions. This means that  the  subject's  memory
-       must  not be freed until all such operations are complete. For some ap-
-       plications where the lifetime of the subject string is not  guaranteed,
-       it  may  be  necessary  to make a copy of the subject string, but it is
-       wasteful to do this unless the match is successful. After a  successful
-       match,  if PCRE2_COPY_MATCHED_SUBJECT is set, the subject is copied and
-       the new pointer is remembered in the match data block  instead  of  the
-       original  subject  pointer.  The memory allocator that was used for the
-       match block itself is  used.  The  copy  is  automatically  freed  when
-       pcre2_match_data_free()  is  called to free the match data block. It is
+       By  default,  a  pointer to the subject is remembered in the match data
+       block so that, after a successful match, it can be  referenced  by  the
+       substring  extraction  functions.  This means that the subject's memory
+       must not be freed until all such operations are complete. For some  ap-
+       plications  where the lifetime of the subject string is not guaranteed,
+       it may be necessary to make a copy of the subject  string,  but  it  is
+       wasteful  to do this unless the match is successful. After a successful
+       match, if PCRE2_COPY_MATCHED_SUBJECT is set, the subject is copied  and
+       the  new  pointer  is remembered in the match data block instead of the
+       original subject pointer. The memory allocator that was  used  for  the
+       match  block  itself  is  used.  The  copy  is automatically freed when
+       pcre2_match_data_free() is called to free the match data block.  It  is
        also automatically freed if the match data block is re-used for another
        match operation.
 
          PCRE2_DISABLE_RECURSELOOP_CHECK
 
-       This option is relevant only to pcre2_match() for  interpretive  match-
-       ing.    It   is  ignored  when  JIT  is  used,  and  is  forbidden  for
+       This  option  is relevant only to pcre2_match() for interpretive match-
+       ing.   It  is  ignored  when  JIT  is  used,  and  is   forbidden   for
        pcre2_dfa_match().
 
        The use of recursion in patterns can lead to infinite loops. In the in-
-       terpretive matcher these would be eventually caught  by  the  match  or
+       terpretive  matcher  these  would  be eventually caught by the match or
        heap limits, but this could take a long time and/or use a lot of memory
-       if  the  limits  are  large. There is therefore a check at the start of
-       each recursion.  If the same group is  still  active  from  a  previous
-       call,  and  the  current  subject  pointer is the same as it was at the
-       start of that group, and the furthest inspected character of  the  sub-
+       if the limits are large. There is therefore a check  at  the  start  of
+       each  recursion.   If  the  same  group is still active from a previous
+       call, and the current subject pointer is the same  as  it  was  at  the
+       start  of  that group, and the furthest inspected character of the sub-
        ject has not changed, an error is generated.
 
-       There  are  rare cases of matches that would complete, but nevertheless
-       trigger this error. This option disables  the  check.  It  is  provided
+       There are rare cases of matches that would complete,  but  nevertheless
+       trigger  this  error.  This  option  disables the check. It is provided
        mainly for testing when comparing JIT and interpretive behaviour.
 
          PCRE2_ENDANCHORED
 
-       If  the  PCRE2_ENDANCHORED option is set, any string that pcre2_match()
-       matches must be right at the end of the subject string. Note that  set-
+       If the PCRE2_ENDANCHORED option is set, any string  that  pcre2_match()
+       matches  must be right at the end of the subject string. Note that set-
        ting the option at match time disables JIT matching.
 
          PCRE2_NOTBOL
 
        This option specifies that first character of the subject string is not
-       the  beginning  of  a  line, so the circumflex metacharacter should not
-       match before it. Setting this without  having  set  PCRE2_MULTILINE  at
+       the beginning of a line, so the  circumflex  metacharacter  should  not
+       match  before  it.  Setting  this without having set PCRE2_MULTILINE at
        compile time causes circumflex never to match. This option affects only
        the behaviour of the circumflex metacharacter. It does not affect \A.
 
          PCRE2_NOTEOL
 
        This option specifies that the end of the subject string is not the end
-       of  a line, so the dollar metacharacter should not match it nor (except
-       in multiline mode) a newline immediately before it. Setting this  with-
-       out  having  set PCRE2_MULTILINE at compile time causes dollar never to
+       of a line, so the dollar metacharacter should not match it nor  (except
+       in  multiline mode) a newline immediately before it. Setting this with-
+       out having set PCRE2_MULTILINE at compile time causes dollar  never  to
        match. This option affects only the behaviour of the dollar metacharac-
        ter. It does not affect \Z or \z.
 
          PCRE2_NOTEMPTY
 
        An empty string is not considered to be a valid match if this option is
-       set. If there are alternatives in the pattern, they are tried.  If  all
-       the  alternatives  match  the empty string, the entire match fails. For
+       set.  If  there are alternatives in the pattern, they are tried. If all
+       the alternatives match the empty string, the entire  match  fails.  For
        example, if the pattern
 
          a?b?
 
-       is applied to a string not beginning with "a" or  "b",  it  matches  an
+       is  applied  to  a  string not beginning with "a" or "b", it matches an
        empty string at the start of the subject. With PCRE2_NOTEMPTY set, this
-       match  is  not valid, so pcre2_match() searches further into the string
+       match is not valid, so pcre2_match() searches further into  the  string
        for occurrences of "a" or "b".
 
          PCRE2_NOTEMPTY_ATSTART
 
-       This is like PCRE2_NOTEMPTY, except that it locks out an  empty  string
+       This  is  like PCRE2_NOTEMPTY, except that it locks out an empty string
        match only at the first matching position, that is, at the start of the
-       subject  plus  the  starting offset. An empty string match later in the
+       subject plus the starting offset. An empty string match  later  in  the
        subject is permitted.  If the pattern is anchored, such a match can oc-
        cur only if the pattern contains \K.
 
          PCRE2_NO_JIT
 
-       By  default,  if  a  pattern  has  been   successfully   processed   by
-       pcre2_jit_compile(),  JIT  is  automatically used when pcre2_match() is
-       called with options that JIT supports.  Setting  PCRE2_NO_JIT  disables
+       By   default,   if   a  pattern  has  been  successfully  processed  by
+       pcre2_jit_compile(), JIT is automatically used  when  pcre2_match()  is
+       called  with  options  that JIT supports. Setting PCRE2_NO_JIT disables
        the use of JIT; it forces matching to be done by the interpreter.
 
          PCRE2_NO_UTF_CHECK
 
        When PCRE2_UTF is set at compile time, the validity of the subject as a
-       UTF   string   is   checked  unless  PCRE2_NO_UTF_CHECK  is  passed  to
+       UTF  string  is  checked  unless  PCRE2_NO_UTF_CHECK   is   passed   to
        pcre2_match() or PCRE2_MATCH_INVALID_UTF was passed to pcre2_compile().
        The latter special case is discussed in detail in the pcre2unicode doc-
        umentation.
 
-       In the default case, if a non-zero starting offset is given, the  check
-       is  applied  only  to  that part of the subject that could be inspected
-       during matching, and there is a check that the starting  offset  points
-       to  the first code unit of a character or to the end of the subject. If
-       there are no lookbehind assertions in the pattern, the check starts  at
+       In  the default case, if a non-zero starting offset is given, the check
+       is applied only to that part of the subject  that  could  be  inspected
+       during  matching,  and there is a check that the starting offset points
+       to the first code unit of a character or to the end of the subject.  If
+       there  are no lookbehind assertions in the pattern, the check starts at
        the starting offset.  Otherwise, it starts at the length of the longest
-       lookbehind  before  the starting offset, or at the start of the subject
-       if there are not that many characters before the starting offset.  Note
+       lookbehind before the starting offset, or at the start of  the  subject
+       if  there are not that many characters before the starting offset. Note
        that the sequences \b and \B are one-character lookbehinds.
 
        The check is carried out before any other processing takes place, and a
-       negative  error  code is returned if the check fails. There are several
-       UTF error codes for each code unit width,  corresponding  to  different
-       problems  with  the code unit sequence. There are discussions about the
-       validity of UTF-8 strings, UTF-16 strings, and UTF-32  strings  in  the
+       negative error code is returned if the check fails. There  are  several
+       UTF  error  codes  for each code unit width, corresponding to different
+       problems with the code unit sequence. There are discussions  about  the
+       validity  of  UTF-8  strings, UTF-16 strings, and UTF-32 strings in the
        pcre2unicode documentation.
 
        If you know that your subject is valid, and you want to skip this check
        for performance reasons, you can set the PCRE2_NO_UTF_CHECK option when
-       calling  pcre2_match().  You  might  want to do this for the second and
-       subsequent calls to pcre2_match() if you are making repeated  calls  to
+       calling pcre2_match(). You might want to do this  for  the  second  and
+       subsequent  calls  to pcre2_match() if you are making repeated calls to
        find multiple matches in the same subject string.
 
-       Warning:  Unless  PCRE2_MATCH_INVALID_UTF was set at compile time, when
-       PCRE2_NO_UTF_CHECK is set at match time the effect of  passing  an  in-
+       Warning: Unless PCRE2_MATCH_INVALID_UTF was set at compile  time,  when
+       PCRE2_NO_UTF_CHECK  is  set  at match time the effect of passing an in-
        valid string as a subject, or an invalid value of startoffset, is unde-
-       fined.   Your  program may crash or loop indefinitely or give wrong re-
+       fined.  Your program may crash or loop indefinitely or give  wrong  re-
        sults.
 
          PCRE2_PARTIAL_HARD
          PCRE2_PARTIAL_SOFT
 
        These options turn on the partial matching feature. A partial match oc-
-       curs if the end of the subject  string  is  reached  successfully,  but
+       curs  if  the  end  of  the subject string is reached successfully, but
        there are not enough subject characters to complete the match. In addi-
-       tion,  either  at  least  one character must have been inspected or the
-       pattern must contain a lookbehind, or the  pattern  must  be  one  that
+       tion, either at least one character must have  been  inspected  or  the
+       pattern  must  contain  a  lookbehind,  or the pattern must be one that
        could match an empty string.
 
-       If  this  situation  arises when PCRE2_PARTIAL_SOFT (but not PCRE2_PAR-
+       If this situation arises when PCRE2_PARTIAL_SOFT  (but  not  PCRE2_PAR-
        TIAL_HARD) is set, matching continues by testing any remaining alterna-
-       tives. Only if no complete match can be  found  is  PCRE2_ERROR_PARTIAL
-       returned  instead  of  PCRE2_ERROR_NOMATCH.  In other words, PCRE2_PAR-
-       TIAL_SOFT specifies that the caller is prepared  to  handle  a  partial
+       tives.  Only  if  no complete match can be found is PCRE2_ERROR_PARTIAL
+       returned instead of PCRE2_ERROR_NOMATCH.  In  other  words,  PCRE2_PAR-
+       TIAL_SOFT  specifies  that  the  caller is prepared to handle a partial
        match, but only if no complete match can be found.
 
-       If  PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In this
-       case, if a partial match is found,  pcre2_match()  immediately  returns
-       PCRE2_ERROR_PARTIAL,  without  considering  any  other alternatives. In
+       If PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In  this
+       case,  if  a  partial match is found, pcre2_match() immediately returns
+       PCRE2_ERROR_PARTIAL, without considering  any  other  alternatives.  In
        other words, when PCRE2_PARTIAL_HARD is set, a partial match is consid-
        ered to be more important than an alternative complete match.
 
@@ -3097,38 +3107,38 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
 
 NEWLINE HANDLING WHEN MATCHING
 
-       When PCRE2 is built, a default newline convention is set; this is  usu-
-       ally  the standard convention for the operating system. The default can
-       be overridden in a compile context by calling  pcre2_set_newline().  It
-       can  also be overridden by starting a pattern string with, for example,
-       (*CRLF), as described in the section  on  newline  conventions  in  the
-       pcre2pattern  page. During matching, the newline choice affects the be-
-       haviour of the dot, circumflex, and dollar metacharacters. It may  also
-       alter  the  way  the  match starting position is advanced after a match
+       When  PCRE2 is built, a default newline convention is set; this is usu-
+       ally the standard convention for the operating system. The default  can
+       be  overridden  in a compile context by calling pcre2_set_newline(). It
+       can also be overridden by starting a pattern string with, for  example,
+       (*CRLF),  as  described  in  the  section on newline conventions in the
+       pcre2pattern page. During matching, the newline choice affects the  be-
+       haviour  of the dot, circumflex, and dollar metacharacters. It may also
+       alter the way the match starting position is  advanced  after  a  match
        failure for an unanchored pattern.
 
        When PCRE2_NEWLINE_CRLF, PCRE2_NEWLINE_ANYCRLF, or PCRE2_NEWLINE_ANY is
-       set as the newline convention, and a match attempt  for  an  unanchored
+       set  as  the  newline convention, and a match attempt for an unanchored
        pattern fails when the current starting position is at a CRLF sequence,
-       and  the  pattern contains no explicit matches for CR or LF characters,
-       the match position is advanced by two characters  instead  of  one,  in
+       and the pattern contains no explicit matches for CR or  LF  characters,
+       the  match  position  is  advanced by two characters instead of one, in
        other words, to after the CRLF.
 
        The above rule is a compromise that makes the most common cases work as
-       expected.  For example, if the pattern is .+A (and the PCRE2_DOTALL op-
-       tion is not set), it does not match the string "\r\nA"  because,  after
-       failing  at the start, it skips both the CR and the LF before retrying.
-       However, the pattern [\r\n]A does match that string,  because  it  con-
+       expected. For example, if the pattern is .+A (and the PCRE2_DOTALL  op-
+       tion  is  not set), it does not match the string "\r\nA" because, after
+       failing at the start, it skips both the CR and the LF before  retrying.
+       However,  the  pattern  [\r\n]A does match that string, because it con-
        tains an explicit CR or LF reference, and so advances only by one char-
        acter after the first failure.
 
        An explicit match for CR of LF is either a literal appearance of one of
-       those  characters  in the pattern, or one of the \r or \n or equivalent
+       those characters in the pattern, or one of the \r or \n  or  equivalent
        octal or hexadecimal escape sequences. Implicit matches such as [^X] do
-       not count, nor does \s, even though it includes CR and LF in the  char-
+       not  count, nor does \s, even though it includes CR and LF in the char-
        acters that it matches.
 
-       Notwithstanding  the above, anomalous effects may still occur when CRLF
+       Notwithstanding the above, anomalous effects may still occur when  CRLF
        is a valid newline sequence and explicit \r or \n escapes appear in the
        pattern.
 
@@ -3139,83 +3149,83 @@ HOW PCRE2_MATCH() RETURNS A STRING AND CAPTURED SUBSTRINGS
 
        PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *match_data);
 
-       In general, a pattern matches a certain portion of the subject, and  in
-       addition,  further  substrings  from  the  subject may be picked out by
-       parenthesized parts of the pattern.  Following  the  usage  in  Jeffrey
-       Friedl's  book,  this  is  called  "capturing" in what follows, and the
-       phrase "capture group" (Perl terminology) is used for a fragment  of  a
-       pattern  that picks out a substring. PCRE2 supports several other kinds
+       In  general, a pattern matches a certain portion of the subject, and in
+       addition, further substrings from the subject  may  be  picked  out  by
+       parenthesized  parts  of  the  pattern.  Following the usage in Jeffrey
+       Friedl's book, this is called "capturing"  in  what  follows,  and  the
+       phrase  "capture  group" (Perl terminology) is used for a fragment of a
+       pattern that picks out a substring. PCRE2 supports several other  kinds
        of parenthesized group that do not cause substrings to be captured. The
-       pcre2_pattern_info() function can be used to find out how many  capture
+       pcre2_pattern_info()  function can be used to find out how many capture
        groups there are in a compiled pattern.
 
-       You  can  use  auxiliary functions for accessing captured substrings by
+       You can use auxiliary functions for accessing  captured  substrings  by
        number or by name, as described in sections below.
 
        Alternatively, you can make direct use of the vector of PCRE2_SIZE val-
-       ues, called  the  ovector,  which  contains  the  offsets  of  captured
-       strings.   It   is   part  of  the  match  data  block.   The  function
-       pcre2_get_ovector_pointer() returns the address  of  the  ovector,  and
+       ues,  called  the  ovector,  which  contains  the  offsets  of captured
+       strings.  It  is  part  of  the  match  data   block.    The   function
+       pcre2_get_ovector_pointer()  returns  the  address  of the ovector, and
        pcre2_get_ovector_count() returns the number of pairs of values it con-
        tains.
 
        Within the ovector, the first in each pair of values is set to the off-
        set of the first code unit of a substring, and the second is set to the
-       offset  of the first code unit after the end of a substring. These val-
-       ues are always code unit offsets, not character offsets. That is,  they
+       offset of the first code unit after the end of a substring. These  val-
+       ues  are always code unit offsets, not character offsets. That is, they
        are byte offsets in the 8-bit library, 16-bit offsets in the 16-bit li-
        brary, and 32-bit offsets in the 32-bit library.
 
-       After  a  partial  match  (error  return PCRE2_ERROR_PARTIAL), only the
-       first pair of offsets (that is, ovector[0]  and  ovector[1])  are  set.
-       They  identify  the part of the subject that was partially matched. See
+       After a partial match  (error  return  PCRE2_ERROR_PARTIAL),  only  the
+       first  pair  of  offsets  (that is, ovector[0] and ovector[1]) are set.
+       They identify the part of the subject that was partially  matched.  See
        the pcre2partial documentation for details of partial matching.
 
-       After a fully successful match, the first pair  of  offsets  identifies
-       the  portion  of the subject string that was matched by the entire pat-
-       tern. The next pair is used for the first captured  substring,  and  so
-       on.  The  value  returned by pcre2_match() is one more than the highest
-       numbered pair that has been set. For example, if  two  substrings  have
-       been  captured,  the returned value is 3. If there are no captured sub-
+       After  a  fully  successful match, the first pair of offsets identifies
+       the portion of the subject string that was matched by the  entire  pat-
+       tern.  The  next  pair is used for the first captured substring, and so
+       on. The value returned by pcre2_match() is one more  than  the  highest
+       numbered  pair  that  has been set. For example, if two substrings have
+       been captured, the returned value is 3. If there are no  captured  sub-
        strings, the return value from a successful match is 1, indicating that
        just the first pair of offsets has been set.
 
-       If a pattern uses the \K escape sequence within  a  positive  lookahead
+       If  a  pattern  uses the \K escape sequence within a positive lookahead
        assertion, the reported start of a successful match can be greater than
-       the  end  of the match. For example, if the pattern (?=ab\K) is matched
-       against "ab", the start and end offset values for the match are  2  and
+       the end of the match. For example, if the pattern (?=ab\K)  is  matched
+       against  "ab",  the start and end offset values for the match are 2 and
        0.
 
-       If  a  capture group is matched repeatedly within a single match opera-
+       If a capture group is matched repeatedly within a single  match  opera-
        tion, it is the last portion of the subject that it matched that is re-
        turned.
 
        If the ovector is too small to hold all the captured substring offsets,
-       as much as possible is filled in, and the function returns a  value  of
-       zero.  If captured substrings are not of interest, pcre2_match() may be
+       as  much  as possible is filled in, and the function returns a value of
+       zero. If captured substrings are not of interest, pcre2_match() may  be
        called with a match data block whose ovector is of minimum length (that
        is, one pair).
 
-       It is possible for capture group number n+1 to match some part  of  the
-       subject  when  group  n  has  not been used at all. For example, if the
+       It  is  possible for capture group number n+1 to match some part of the
+       subject when group n has not been used at  all.  For  example,  if  the
        string "abc" is matched against the pattern (a|(z))(bc) the return from
-       the function is 4, and groups 1 and 3 are matched, but 2 is  not.  When
-       this  happens,  both values in the offset pairs corresponding to unused
+       the  function  is 4, and groups 1 and 3 are matched, but 2 is not. When
+       this happens, both values in the offset pairs corresponding  to  unused
        groups are set to PCRE2_UNSET.
 
-       Offset values that correspond to unused groups at the end  of  the  ex-
-       pression  are also set to PCRE2_UNSET. For example, if the string "abc"
-       is matched against the pattern (abc)(x(yz)?)? groups 2 and  3  are  not
-       matched.  The  return  from the function is 2, because the highest used
+       Offset  values  that  correspond to unused groups at the end of the ex-
+       pression are also set to PCRE2_UNSET. For example, if the string  "abc"
+       is  matched  against  the pattern (abc)(x(yz)?)? groups 2 and 3 are not
+       matched. The return from the function is 2, because  the  highest  used
        capture group number is 1. The offsets for the second and third capture
-       groups (assuming the vector is large enough,  of  course)  are  set  to
+       groups  (assuming  the  vector  is  large enough, of course) are set to
        PCRE2_UNSET.
 
        Elements in the ovector that do not correspond to capturing parentheses
        in the pattern are never changed. That is, if a pattern contains n cap-
        turing parentheses, no more than ovector[0] to ovector[2n+1] are set by
-       pcre2_match().  The  other  elements retain whatever values they previ-
-       ously had. After a failed match attempt, the contents  of  the  ovector
+       pcre2_match(). The other elements retain whatever  values  they  previ-
+       ously  had.  After  a failed match attempt, the contents of the ovector
        are unchanged.
 
 
@@ -3225,69 +3235,69 @@ OTHER INFORMATION ABOUT A MATCH
 
        PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *match_data);
 
-       As  well as the offsets in the ovector, other information about a match
-       is retained in the match data block and can be retrieved by  the  above
-       functions  in  appropriate  circumstances.  If they are called at other
+       As well as the offsets in the ovector, other information about a  match
+       is  retained  in the match data block and can be retrieved by the above
+       functions in appropriate circumstances. If they  are  called  at  other
        times, the result is undefined.
 
-       After a successful match, a partial match (PCRE2_ERROR_PARTIAL),  or  a
-       failure  to  match (PCRE2_ERROR_NOMATCH), a mark name may be available.
-       The function pcre2_get_mark() can be called to access this name,  which
-       can  be  specified  in  the  pattern by any of the backtracking control
+       After  a  successful match, a partial match (PCRE2_ERROR_PARTIAL), or a
+       failure to match (PCRE2_ERROR_NOMATCH), a mark name may  be  available.
+       The  function pcre2_get_mark() can be called to access this name, which
+       can be specified in the pattern by  any  of  the  backtracking  control
        verbs, not just (*MARK). The same function applies to all the verbs. It
        returns a pointer to the zero-terminated name, which is within the com-
        piled pattern. If no name is available, NULL is returned. The length of
-       the name (excluding the terminating zero) is stored in  the  code  unit
-       that  precedes  the name. You should use this length instead of relying
+       the  name  (excluding  the terminating zero) is stored in the code unit
+       that precedes the name. You should use this length instead  of  relying
        on the terminating zero if the name might contain a binary zero.
 
-       After a successful match, the name that is returned is  the  last  mark
+       After  a  successful  match, the name that is returned is the last mark
        name encountered on the matching path through the pattern. Instances of
-       backtracking  verbs  without  names do not count. Thus, for example, if
+       backtracking verbs without names do not count. Thus,  for  example,  if
        the matching path contains (*MARK:A)(*PRUNE), the name "A" is returned.
        After a "no match" or a partial match, the last encountered name is re-
        turned. For example, consider this pattern:
 
          ^(*MARK:A)((*MARK:B)a|b)c
 
-       When it matches "bc", the returned name is A. The B mark is  "seen"  in
-       the  first  branch of the group, but it is not on the matching path. On
-       the other hand, when this pattern fails to  match  "bx",  the  returned
+       When  it  matches "bc", the returned name is A. The B mark is "seen" in
+       the first branch of the group, but it is not on the matching  path.  On
+       the  other  hand,  when  this pattern fails to match "bx", the returned
        name is B.
 
-       Warning:  By  default, certain start-of-match optimizations are used to
-       give a fast "no match" result in some situations. For example,  if  the
-       anchoring  is removed from the pattern above, there is an initial check
-       for the presence of "c" in the subject before running the matching  en-
+       Warning: By default, certain start-of-match optimizations are  used  to
+       give  a  fast "no match" result in some situations. For example, if the
+       anchoring is removed from the pattern above, there is an initial  check
+       for  the presence of "c" in the subject before running the matching en-
        gine. This check fails for "bx", causing a match failure without seeing
-       any  marks. You can disable the start-of-match optimizations by setting
-       the PCRE2_NO_START_OPTIMIZE option for pcre2_compile() or  by  starting
+       any marks. You can disable the start-of-match optimizations by  setting
+       the  PCRE2_NO_START_OPTIMIZE  option for pcre2_compile() or by starting
        the pattern with (*NO_START_OPT).
 
-       After  a  successful  match, a partial match, or one of the invalid UTF
-       errors (for example, PCRE2_ERROR_UTF8_ERR5), pcre2_get_startchar()  can
+       After a successful match, a partial match, or one of  the  invalid  UTF
+       errors  (for example, PCRE2_ERROR_UTF8_ERR5), pcre2_get_startchar() can
        be called. After a successful or partial match it returns the code unit
-       offset  of  the character at which the match started. For a non-partial
-       match, this can be different to the value of ovector[0] if the  pattern
-       contains  the  \K escape sequence. After a partial match, however, this
-       value is always the same as ovector[0] because \K does not  affect  the
+       offset of the character at which the match started. For  a  non-partial
+       match,  this can be different to the value of ovector[0] if the pattern
+       contains the \K escape sequence. After a partial match,  however,  this
+       value  is  always the same as ovector[0] because \K does not affect the
        result of a partial match.
 
-       After  a UTF check failure, pcre2_get_startchar() can be used to obtain
+       After a UTF check failure, pcre2_get_startchar() can be used to  obtain
        the code unit offset of the invalid UTF character. Details are given in
        the pcre2unicode page.
 
 
 ERROR RETURNS FROM pcre2_match()
 
-       If pcre2_match() fails, it returns a negative number. This can be  con-
-       verted  to a text string by calling the pcre2_get_error_message() func-
-       tion (see "Obtaining a textual error message" below).   Negative  error
-       codes  are  also  returned  by other functions, and are documented with
-       them. The codes are given names in the header file. If UTF checking  is
+       If  pcre2_match() fails, it returns a negative number. This can be con-
+       verted to a text string by calling the pcre2_get_error_message()  func-
+       tion  (see  "Obtaining a textual error message" below).  Negative error
+       codes are also returned by other functions,  and  are  documented  with
+       them.  The codes are given names in the header file. If UTF checking is
        in force and an invalid UTF subject string is detected, one of a number
-       of  UTF-specific negative error codes is returned. Details are given in
-       the pcre2unicode page. The following are the other errors that  may  be
+       of UTF-specific negative error codes is returned. Details are given  in
+       the  pcre2unicode  page. The following are the other errors that may be
        returned by pcre2_match():
 
          PCRE2_ERROR_NOMATCH
@@ -3296,20 +3306,20 @@ ERROR RETURNS FROM pcre2_match()
 
          PCRE2_ERROR_PARTIAL
 
-       The  subject  string did not match, but it did match partially. See the
+       The subject string did not match, but it did match partially.  See  the
        pcre2partial documentation for details of partial matching.
 
          PCRE2_ERROR_BADMAGIC
 
        PCRE2 stores a 4-byte "magic number" at the start of the compiled code,
-       to catch the case when it is passed a junk pointer. This is  the  error
+       to  catch  the case when it is passed a junk pointer. This is the error
        that is returned when the magic number is not present.
 
          PCRE2_ERROR_BADMODE
 
-       This  error is given when a compiled pattern is passed to a function in
-       a library of a different code unit width, for example, a  pattern  com-
-       piled  by  the  8-bit  library  is passed to a 16-bit or 32-bit library
+       This error is given when a compiled pattern is passed to a function  in
+       a  library  of a different code unit width, for example, a pattern com-
+       piled by the 8-bit library is passed to  a  16-bit  or  32-bit  library
        function.
 
          PCRE2_ERROR_BADOFFSET
@@ -3323,15 +3333,15 @@ ERROR RETURNS FROM pcre2_match()
          PCRE2_ERROR_BADUTFOFFSET
 
        The UTF code unit sequence that was passed as a subject was checked and
-       found to be valid (the PCRE2_NO_UTF_CHECK option was not set), but  the
-       value  of startoffset did not point to the beginning of a UTF character
+       found  to be valid (the PCRE2_NO_UTF_CHECK option was not set), but the
+       value of startoffset did not point to the beginning of a UTF  character
        or the end of the subject.
 
          PCRE2_ERROR_CALLOUT
 
-       This error is never generated by pcre2_match() itself. It  is  provided
-       for  use  by  callout  functions  that  want  to cause pcre2_match() or
-       pcre2_callout_enumerate() to return a distinctive error code.  See  the
+       This  error  is never generated by pcre2_match() itself. It is provided
+       for use by callout  functions  that  want  to  cause  pcre2_match()  or
+       pcre2_callout_enumerate()  to  return a distinctive error code. See the
        pcre2callout documentation for details.
 
          PCRE2_ERROR_DEPTHLIMIT
@@ -3344,14 +3354,14 @@ ERROR RETURNS FROM pcre2_match()
 
          PCRE2_ERROR_INTERNAL
 
-       An  unexpected  internal error has occurred. This error could be caused
+       An unexpected internal error has occurred. This error could  be  caused
        by a bug in PCRE2 or by overwriting of the compiled pattern.
 
          PCRE2_ERROR_JIT_STACKLIMIT
 
        This error is returned when a pattern that was successfully studied us-
        ing JIT is being matched, but the memory available for the just-in-time
-       processing stack is not large enough. See  the  pcre2jit  documentation
+       processing  stack  is  not large enough. See the pcre2jit documentation
        for more details.
 
          PCRE2_ERROR_MATCHLIMIT
@@ -3360,11 +3370,11 @@ ERROR RETURNS FROM pcre2_match()
 
          PCRE2_ERROR_NOMEMORY
 
-       Heap  memory  is  used  to  remember backtracking points. This error is
-       given when the memory allocation function (default  or  custom)  fails.
-       Note  that  a  different  error, PCRE2_ERROR_HEAPLIMIT, is given if the
+       Heap memory is used to remember  backtracking  points.  This  error  is
+       given  when  the  memory allocation function (default or custom) fails.
+       Note that a different error, PCRE2_ERROR_HEAPLIMIT,  is  given  if  the
        amount of memory needed exceeds the heap limit. PCRE2_ERROR_NOMEMORY is
-       also returned if PCRE2_COPY_MATCHED_SUBJECT is set and  memory  alloca-
+       also  returned  if PCRE2_COPY_MATCHED_SUBJECT is set and memory alloca-
        tion fails.
 
          PCRE2_ERROR_NULL
@@ -3373,12 +3383,12 @@ ERROR RETURNS FROM pcre2_match()
 
          PCRE2_ERROR_RECURSELOOP
 
-       This  error  is  returned  when  pcre2_match() detects a recursion loop
-       within the pattern. Specifically, it means that either the  whole  pat-
+       This error is returned when  pcre2_match()  detects  a  recursion  loop
+       within  the  pattern. Specifically, it means that either the whole pat-
        tern or a capture group has been called recursively for the second time
-       at  the  same position in the subject string. Some simple patterns that
-       might do this are detected and faulted at compile time, but  more  com-
-       plicated  cases,  in particular mutual recursions between two different
+       at the same position in the subject string. Some simple  patterns  that
+       might  do  this are detected and faulted at compile time, but more com-
+       plicated cases, in particular mutual recursions between  two  different
        groups, cannot be detected until matching is attempted.
 
 
@@ -3387,18 +3397,18 @@ OBTAINING A TEXTUAL ERROR MESSAGE
        int pcre2_get_error_message(int errorcode, PCRE2_UCHAR *buffer,
          PCRE2_SIZE bufflen);
 
-       A text message for an error code  from  any  PCRE2  function  (compile,
-       match,  or  auxiliary)  can be obtained by calling pcre2_get_error_mes-
-       sage(). The code is passed as the first argument,  with  the  remaining
-       two  arguments  specifying  a  code  unit buffer and its length in code
-       units, into which the text message is placed. The message  is  returned
-       in  code  units  of the appropriate width for the library that is being
+       A  text  message  for  an  error code from any PCRE2 function (compile,
+       match, or auxiliary) can be obtained  by  calling  pcre2_get_error_mes-
+       sage().  The  code  is passed as the first argument, with the remaining
+       two arguments specifying a code unit buffer  and  its  length  in  code
+       units,  into  which the text message is placed. The message is returned
+       in code units of the appropriate width for the library  that  is  being
        used.
 
-       The returned message is terminated with a trailing zero, and the  func-
-       tion  returns  the  number  of  code units used, excluding the trailing
+       The  returned message is terminated with a trailing zero, and the func-
+       tion returns the number of code  units  used,  excluding  the  trailing
        zero. If the error number is unknown, the negative error code PCRE2_ER-
-       ROR_BADDATA is returned. If the buffer is too  small,  the  message  is
+       ROR_BADDATA  is  returned.  If  the buffer is too small, the message is
        truncated (but still with a trailing zero), and the negative error code
        PCRE2_ERROR_NOMEMORY is returned.  None of the messages is very long; a
        buffer size of 120 code units is ample.
@@ -3410,28 +3420,28 @@ ITERATING OVER ALL MATCHES
          PCRE2_SIZE *pstart_offset, uint32_t *poptions);
 
        A common task for applications is to implement "global" matching behav-
-       iour,  for example, replacing all matches in the subject; splitting the
-       subject on all matches; or simply counting the number of  matches.  The
-       pcre2_next_match()  function  helps with this task by providing the ap-
-       propriate parameters for the next match attempt (available since  PCRE2
-       10.46).
-
-       First,  a  match attempt should be made using one of the matching func-
-       tions (pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()).   Then,
+       iour, for example, replacing all matches in the subject; splitting  the
+       subject  on  all matches; or simply counting the number of matches. The
+       pcre2_next_match() function helps with this task by providing  the  ap-
+       propriate  parameters for the next match attempt (available since PCRE2
+       10.47).
+
+       First, a match attempt should be made using one of the  matching  func-
+       tions  (pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()).  Then,
        pcre2_next_match() can be called, providing the same match_data parame-
        ter.
 
-       It  returns 0 ("false") if there is no need to make a further match at-
-       tempt, or 1 ("true") if another match should be attempted. Returning  1
-       does  not  imply  that  there is another match, only that another match
+       It returns 0 ("false") if there is no need to make a further match  at-
+       tempt,  or 1 ("true") if another match should be attempted. Returning 1
+       does not imply that there is another match,  only  that  another  match
        should be attempted (which may return PCRE2_ERROR_NOMATCH).
 
-       The *pstart_offset and *poptions are set if  the  function  returns  1.
+       The  *pstart_offset  and  *poptions  are set if the function returns 1.
        The *pstart_offset should be passed to the next match attempt directly,
        and the *poptions should be passed to the next match attempt by combin-
        ing with the application's match options using OR.
 
-       There  is  some  code that demonstrates how to do this in the pcre2demo
+       There is some code that demonstrates how to do this  in  the  pcre2demo
        sample program. The general pattern is:
 
          uint32_t app_options = ...;
@@ -3453,18 +3463,18 @@ ITERATING OVER ALL MATCHES
            }
 
        The guarantees provided by pcre2_next_match() are that the start_offset
-       will advance, so the loop will  definitely  terminate.  The  conditions
-       which  ensure  this  are  that either: (a) pcre2_next_match() returns 0
-       (false); or (b) the returned *pstart_offset is  strictly  greater  than
-       the  previous start_offset; or (c) if the previous match was a success-
+       will  advance,  so  the  loop will definitely terminate. The conditions
+       which ensure this are that either:  (a)  pcre2_next_match()  returns  0
+       (false);  or  (b)  the returned *pstart_offset is strictly greater than
+       the previous start_offset; or (c) if the previous match was a  success-
        ful match of the empty string then the returned *pstart_offset is equal
-       to  the  previous  ovector[1],   and   *poptions   will   be   set   to
-       PCRE2_NOTEMPTY_ATSTART  to  prevent  another empty match from being re-
+       to   the   previous   ovector[1],   and   *poptions   will  be  set  to
+       PCRE2_NOTEMPTY_ATSTART to prevent another empty match  from  being  re-
        turned.
 
-       A loop implemented as shown above will always terminate,  unless  there
-       is  a  bug  in PCRE2. As a measure of "defensive programming", applica-
-       tions are encouraged to add an assertion or check to break  their  loop
+       A  loop  implemented as shown above will always terminate, unless there
+       is a bug in PCRE2. As a measure of  "defensive  programming",  applica-
+       tions  are  encouraged to add an assertion or check to break their loop
        if it does not make progress (and report the issue as a bug).
 
        If   an   application   does   not   use   the   flag   PCRE2_EXTRA_AL-
@@ -3472,19 +3482,19 @@ ITERATING OVER ALL MATCHES
 
          start_offset <= ovector[0] <= ovector[1].
 
-       In   this   case,   the   matches   found   by    pcre2_match()    with
+       In    this    case,   the   matches   found   by   pcre2_match()   with
        pcre2_next_match() will be sorted, non-overlapping (possibly touching),
        and with no duplicates.
 
-       Otherwise,  if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the guar-
-       antees are considerably weaker. We do not guarantee  that  the  matches
+       Otherwise, if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the  guar-
+       antees  are  considerably  weaker. We do not guarantee that the matches
        will always advance: only that the start_offset will. The matches found
-       by  pcre2_match() with pcre2_next_match() will be a finite sequence (as
-       pcre2_next_match() ensures that start_offset advances,  so  the  search
-       will  terminate).  The  matches can however be overlapping, can contain
+       by pcre2_match() with pcre2_next_match() will be a finite sequence  (as
+       pcre2_next_match()  ensures  that  start_offset advances, so the search
+       will terminate). The matches can however be  overlapping,  can  contain
        duplicates, and (in truly pathological examples) may not even be sorted
        by ovector[0]. Additionally, each match itself can end before it starts
-       (ovector[1] < ovector[0]). We recommend that applications  do  not  set
+       (ovector[1]  <  ovector[0]).  We recommend that applications do not set
        PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.
 
 
@@ -3503,39 +3513,39 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
 
        void pcre2_substring_free(PCRE2_UCHAR *buffer);
 
-       Captured  substrings  can  be accessed directly by using the ovector as
+       Captured substrings can be accessed directly by using  the  ovector  as
        described above.  For convenience, auxiliary functions are provided for
-       extracting  captured  substrings  as  new,  separate,   zero-terminated
+       extracting   captured  substrings  as  new,  separate,  zero-terminated
        strings. A substring that contains a binary zero is correctly extracted
-       and  has  a  further  zero  added on the end, but the result is not, of
+       and has a further zero added on the end, but  the  result  is  not,  of
        course, a C string.
 
        The functions in this section identify substrings by number. The number
        zero refers to the entire matched substring, with higher numbers refer-
-       ring to substrings captured by parenthesized groups.  After  a  partial
-       match,  only  substring  zero  is  available. An attempt to extract any
-       other substring gives the error PCRE2_ERROR_PARTIAL. The  next  section
+       ring  to  substrings  captured by parenthesized groups. After a partial
+       match, only substring zero is available.  An  attempt  to  extract  any
+       other  substring  gives the error PCRE2_ERROR_PARTIAL. The next section
        describes similar functions for extracting captured substrings by name.
 
-       If  a  pattern  uses the \K escape sequence within a positive lookahead
+       If a pattern uses the \K escape sequence within  a  positive  lookahead
        assertion, the reported start of a successful match can be greater than
-       the end of the match. For example, if the pattern (?=ab\K)  is  matched
-       against  "ab",  the start and end offset values for the match are 2 and
-       0. In this situation, calling these functions  with  a  zero  substring
+       the  end  of the match. For example, if the pattern (?=ab\K) is matched
+       against "ab", the start and end offset values for the match are  2  and
+       0.  In  this  situation,  calling these functions with a zero substring
        number extracts a zero-length empty string.
 
-       You  can  find the length in code units of a captured substring without
-       extracting it by calling pcre2_substring_length_bynumber().  The  first
-       argument  is a pointer to the match data block, the second is the group
-       number, and the third is a pointer to a variable into which the  length
-       is  placed.  If  you just want to know whether or not the substring has
+       You can find the length in code units of a captured  substring  without
+       extracting  it  by calling pcre2_substring_length_bynumber(). The first
+       argument is a pointer to the match data block, the second is the  group
+       number,  and the third is a pointer to a variable into which the length
+       is placed. If you just want to know whether or not  the  substring  has
        been captured, you can pass the third argument as NULL.
 
-       The pcre2_substring_copy_bynumber() function  copies  a  captured  sub-
-       string  into  a supplied buffer, whereas pcre2_substring_get_bynumber()
-       copies it into new memory, obtained using the  same  memory  allocation
-       function  that  was  used for the match data block. The first two argu-
-       ments of these functions are a pointer to the match data  block  and  a
+       The  pcre2_substring_copy_bynumber()  function  copies  a captured sub-
+       string into a supplied buffer,  whereas  pcre2_substring_get_bynumber()
+       copies  it  into  new memory, obtained using the same memory allocation
+       function that was used for the match data block. The  first  two  argu-
+       ments  of  these  functions are a pointer to the match data block and a
        capture group number.
 
        The final arguments of pcre2_substring_copy_bynumber() are a pointer to
@@ -3544,25 +3554,25 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
        for the extracted substring, excluding the terminating zero.
 
        For pcre2_substring_get_bynumber() the third and fourth arguments point
-       to  variables that are updated with a pointer to the new memory and the
-       number of code units that comprise the substring, again  excluding  the
-       terminating  zero.  When  the substring is no longer needed, the memory
+       to variables that are updated with a pointer to the new memory and  the
+       number  of  code units that comprise the substring, again excluding the
+       terminating zero. When the substring is no longer  needed,  the  memory
        should be freed by calling pcre2_substring_free().
 
-       The return value from all these functions is zero  for  success,  or  a
-       negative  error  code.  If  the pattern match failed, the match failure
-       code is returned.  If a substring number greater than zero is used  af-
-       ter  a  partial  match, PCRE2_ERROR_PARTIAL is returned. Other possible
+       The  return  value  from  all these functions is zero for success, or a
+       negative error code. If the pattern match  failed,  the  match  failure
+       code  is returned.  If a substring number greater than zero is used af-
+       ter a partial match, PCRE2_ERROR_PARTIAL is  returned.  Other  possible
        error codes are:
 
          PCRE2_ERROR_NOMEMORY
 
-       The buffer was too small for  pcre2_substring_copy_bynumber(),  or  the
+       The  buffer  was  too small for pcre2_substring_copy_bynumber(), or the
        attempt to get memory failed for pcre2_substring_get_bynumber().
 
          PCRE2_ERROR_NOSUBSTRING
 
-       There  is  no  substring  with that number in the pattern, that is, the
+       There is no substring with that number in the  pattern,  that  is,  the
        number is greater than the number of capturing parentheses.
 
          PCRE2_ERROR_UNAVAILABLE
@@ -3573,8 +3583,8 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
 
          PCRE2_ERROR_UNSET
 
-       The substring did not participate in the match.  For  example,  if  the
-       pattern  is  (abc)|(def) and the subject is "def", and the ovector con-
+       The  substring  did  not  participate in the match. For example, if the
+       pattern is (abc)|(def) and the subject is "def", and the  ovector  con-
        tains at least two capturing slots, substring number 1 is unset.
 
 
@@ -3585,31 +3595,31 @@ EXTRACTING A LIST OF ALL CAPTURED SUBSTRINGS
 
        void pcre2_substring_list_free(PCRE2_UCHAR **list);
 
-       The pcre2_substring_list_get() function  extracts  all  available  sub-
-       strings  and  builds  a  list of pointers to them. It also (optionally)
-       builds a second list that contains their lengths (in code  units),  ex-
-       cluding  a  terminating zero that is added to each of them. All this is
+       The  pcre2_substring_list_get()  function  extracts  all available sub-
+       strings and builds a list of pointers to  them.  It  also  (optionally)
+       builds  a  second list that contains their lengths (in code units), ex-
+       cluding a terminating zero that is added to each of them. All  this  is
        done in a single block of memory that is obtained using the same memory
        allocation function that was used to get the match data block.
 
-       This function must be called only after a successful match.  If  called
+       This  function  must be called only after a successful match. If called
        after a partial match, the error code PCRE2_ERROR_PARTIAL is returned.
 
-       The  address of the memory block is returned via listptr, which is also
+       The address of the memory block is returned via listptr, which is  also
        the start of the list of string pointers. The end of the list is marked
-       by a NULL pointer. The address of the list of lengths is  returned  via
-       lengthsptr.  If your strings do not contain binary zeros and you do not
+       by  a  NULL pointer. The address of the list of lengths is returned via
+       lengthsptr. If your strings do not contain binary zeros and you do  not
        therefore need the lengths, you may supply NULL as the lengthsptr argu-
-       ment to disable the creation of a list of lengths.  The  yield  of  the
-       function  is zero if all went well, or PCRE2_ERROR_NOMEMORY if the mem-
-       ory block could not be obtained. When the list is no longer needed,  it
+       ment  to  disable  the  creation of a list of lengths. The yield of the
+       function is zero if all went well, or PCRE2_ERROR_NOMEMORY if the  mem-
+       ory  block could not be obtained. When the list is no longer needed, it
        should be freed by calling pcre2_substring_list_free().
 
        If this function encounters a substring that is unset, which can happen
-       when  capture  group  number  n+1 matches some part of the subject, but
-       group n has not been used at all, it returns an empty string. This  can
+       when capture group number n+1 matches some part  of  the  subject,  but
+       group  n has not been used at all, it returns an empty string. This can
        be distinguished from a genuine zero-length substring by inspecting the
-       appropriate  offset in the ovector, which contain PCRE2_UNSET for unset
+       appropriate offset in the ovector, which contain PCRE2_UNSET for  unset
        substrings, or by calling pcre2_substring_length_bynumber().
 
 
@@ -3629,7 +3639,7 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
 
        void pcre2_substring_free(PCRE2_UCHAR *buffer);
 
-       To extract a substring by name, you first have to find associated  num-
+       To  extract a substring by name, you first have to find associated num-
        ber.  For example, for this pattern:
 
          (a+)b(?<xxx>\d+)...
@@ -3637,32 +3647,32 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
        the number of the capture group called "xxx" is 2. If the name is known
        to be unique (PCRE2_DUPNAMES was not set), you can find the number from
        the name by calling pcre2_substring_number_from_name(). The first argu-
-       ment  is the compiled pattern, and the second is the name. The yield of
-       the function is the group number, PCRE2_ERROR_NOSUBSTRING if  there  is
-       no  group  with that name, or PCRE2_ERROR_NOUNIQUESUBSTRING if there is
-       more than one group with that name.  Given the number, you can  extract
-       the  substring  directly from the ovector, or use one of the "bynumber"
+       ment is the compiled pattern, and the second is the name. The yield  of
+       the  function  is the group number, PCRE2_ERROR_NOSUBSTRING if there is
+       no group with that name, or PCRE2_ERROR_NOUNIQUESUBSTRING if  there  is
+       more  than one group with that name.  Given the number, you can extract
+       the substring directly from the ovector, or use one of  the  "bynumber"
        functions described above.
 
-       For convenience, there are also "byname" functions that  correspond  to
+       For  convenience,  there are also "byname" functions that correspond to
        the "bynumber" functions, the only difference being that the second ar-
-       gument  is  a  name  instead  of a number. If PCRE2_DUPNAMES is set and
+       gument is a name instead of a number.  If  PCRE2_DUPNAMES  is  set  and
        there are duplicate names, these functions scan all the groups with the
-       given name, and return the captured  substring  from  the  first  named
+       given  name,  and  return  the  captured substring from the first named
        group that is set.
 
-       If  there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING is
-       returned. If all groups with the name have  numbers  that  are  greater
+       If there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING  is
+       returned.  If  all  groups  with the name have numbers that are greater
        than the number of slots in the ovector, PCRE2_ERROR_UNAVAILABLE is re-
-       turned.  If there is at least one group with a slot in the ovector, but
+       turned. If there is at least one group with a slot in the ovector,  but
        no group is found to be set, PCRE2_ERROR_UNSET is returned.
 
        Warning: If the pattern uses the (?| feature to set up multiple capture
-       groups with the same number, as described in the section  on  duplicate
+       groups  with  the same number, as described in the section on duplicate
        group numbers in the pcre2pattern page, you cannot use names to distin-
-       guish  the  different capture groups, because names are not included in
-       the compiled code. The matching process uses  only  numbers.  For  this
-       reason,  the  use  of  different  names for groups with the same number
+       guish the different capture groups, because names are not  included  in
+       the  compiled  code.  The  matching process uses only numbers. For this
+       reason, the use of different names for  groups  with  the  same  number
        causes an error at compile time.
 
 
@@ -3675,100 +3685,108 @@ CREATING A NEW STRING WITH SUBSTITUTIONS
          PCRE2_SIZE rlength, PCRE2_UCHAR *outputbuffer,
          PCRE2_SIZE *outlengthptr);
 
-       This function optionally calls pcre2_match() and then makes a  copy  of
-       the  subject  string in outputbuffer, replacing parts that were matched
+       This  function  optionally calls pcre2_match() and then makes a copy of
+       the subject string in outputbuffer, replacing parts that  were  matched
        with the replacement string, whose length is supplied in rlength, which
-       can be given as PCRE2_ZERO_TERMINATED for a zero-terminated string.  As
-       a  special  case,  if  replacement is NULL and rlength is zero, the re-
-       placement is assumed to be an empty string. If rlength is non-zero,  an
+       can  be given as PCRE2_ZERO_TERMINATED for a zero-terminated string. As
+       a special case, if replacement is NULL and rlength  is  zero,  the  re-
+       placement  is assumed to be an empty string. If rlength is non-zero, an
        error occurs if replacement is NULL.
 
        There is an option (see PCRE2_SUBSTITUTE_REPLACEMENT_ONLY below) to re-
-       turn  just  the replacement string(s). The default action is to perform
-       just one replacement if the pattern matches, but  there  is  an  option
-       that  requests  multiple  replacements (see PCRE2_SUBSTITUTE_GLOBAL be-
+       turn just the replacement string(s). The default action is  to  perform
+       just  one  replacement  if  the pattern matches, but there is an option
+       that requests multiple replacements  (see  PCRE2_SUBSTITUTE_GLOBAL  be-
        low).
 
-       If successful, pcre2_substitute() returns the number  of  substitutions
-       that  were  carried out. This may be zero if no match was found, and is
-       never greater than one unless PCRE2_SUBSTITUTE_GLOBAL is set.  A  nega-
+       If  successful,  pcre2_substitute() returns the number of substitutions
+       that were carried out. This may be zero if no match was found,  and  is
+       never  greater  than one unless PCRE2_SUBSTITUTE_GLOBAL is set. A nega-
        tive value is returned if an error is detected.
 
-       Matches  in  which  a  \K item in a lookahead in the pattern causes the
-       match to end before it starts are not supported, and give  rise  to  an
+       Matches in which a \K item in a lookahead in  the  pattern  causes  the
+       match  to  end  before it starts are not supported, and give rise to an
        error return. For global replacements, matches in which \K in a lookbe-
-       hind  causes the match to start earlier than the point that was reached
+       hind causes the match to start earlier than the point that was  reached
        in the previous iteration are also not supported. (These cases are only
-       possible if the pattern was compiled with  the  backwards-compatibility
+       possible  if  the pattern was compiled with the backwards-compatibility
        option PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.)
 
-       The  first  seven  arguments  of pcre2_substitute() are the same as for
+       The first seven arguments of pcre2_substitute() are  the  same  as  for
        pcre2_match(), except that the partial matching options are not permit-
-       ted, and match_data may be passed as NULL, in which case a  match  data
-       block  is obtained and freed within this function, using memory manage-
-       ment functions from the match context, if provided, or else those  that
+       ted,  and  match_data may be passed as NULL, in which case a match data
+       block is obtained and freed within this function, using memory  manage-
+       ment  functions from the match context, if provided, or else those that
        were used to allocate memory for the compiled code.
 
-       If  match_data is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set, the
+       If match_data is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set,  the
        provided block is used for all calls to pcre2_match(), and its contents
-       afterwards are  the  result  of  the  final  call  made  internally  by
-       pcre2_substitute()  to  the matching function. For global changes, this
+       afterwards  are  the  result  of  the  final  call  made  internally by
+       pcre2_substitute() to the matching function. For global  changes,  this
        will always be a no-match error. The contents of the ovector within the
        match data block may or may not have been changed.
 
-       As well as the usual options for pcre2_match(), a number of  additional
-       options  can be set in the options argument of pcre2_substitute().  One
-       such option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an  external
-       match_data  block  must be provided, and it must have already been used
-       for an external call to pcre2_match() (or pcre2_jit_match())  with  the
-       same  pattern, subject pointer, effective subject length, start offset,
+       As  well as the usual options for pcre2_match(), a number of additional
+       options can be set in the options argument of pcre2_substitute().   One
+       such  option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an external
+       match_data block must be provided, and it must have already  been  used
+       for  an  external call to pcre2_match() (or pcre2_jit_match()) with the
+       same pattern, subject pointer, effective subject length, start  offset,
        and match option arguments (substitute-specific options can be added to
-       the  options  argument).  If  any  of  these  parameters  is   changed,
-       pcre2_substitute()  returns  an error. The data in the match_data block
+       the   options  argument).  If  any  of  these  parameters  is  changed,
+       pcre2_substitute() returns an error. The data in the  match_data  block
        (return code, offset vector) is used for the first substitution instead
        of calling pcre2_match() from within pcre2_substitute(). This allows an
        application to check for a match before choosing to substitute, without
        having to repeat the match.
 
-       If  the  contents  of  the  subject  buffer  are  mutated  in   between
-       pcre2_match()  and  a  call  to  pcre2_substitute()  with PCRE2_SUBSTI-
-       TUTE_MATCHED, the behaviour is unsafe; in  particular,  in  this  case,
-       PCRE2  is unable to ensure that the offsets in the ovector point to the
+       If   the  contents  of  the  subject  buffer  are  mutated  in  between
+       pcre2_match() and  a  call  to  pcre2_substitute()  with  PCRE2_SUBSTI-
+       TUTE_MATCHED,  the  behaviour  is  unsafe; in particular, in this case,
+       PCRE2 is unable to ensure that the offsets in the ovector point to  the
        start of characters (with UTF-encoded input).
 
-       The contents of the  externally  supplied  match  data  block  are  not
+       The  contents  of  the  externally  supplied  match  data block are not
        changed when PCRE2_SUBSTITUTE_MATCHED is set, and so the match block is
-       permitted  for  use  in another call using PCRE2_SUBSTITUTE_MATCHED. If
-       PCRE2_SUBSTITUTE_GLOBAL is also set, pcre2_match() is called after  the
-       first  substitution to check for furthe matches, but this is done using
+       permitted for use in another call  using  PCRE2_SUBSTITUTE_MATCHED.  If
+       PCRE2_SUBSTITUTE_GLOBAL  is also set, pcre2_match() is called after the
+       first substitution to check for furthe matches, but this is done  using
        an internally obtained match data block, thus always leaving the exter-
        nal block unchanged.
 
-       The code argument is not used for matching before the  first  substitu-
-       tion  when  PCRE2_SUBSTITUTE_MATCHED  is  set, but it must be provided,
-       even when PCRE2_SUBSTITUTE_GLOBAL is not set, because it  contains  in-
+       The  code  argument is not used for matching before the first substitu-
+       tion when PCRE2_SUBSTITUTE_MATCHED is set, but  it  must  be  provided,
+       even  when  PCRE2_SUBSTITUTE_GLOBAL is not set, because it contains in-
        formation such as the UTF setting and the number of capturing parenthe-
        ses in the pattern.
 
-       When  using PCRE2_SUBSTITUTE_MATCHED, you should not modify the subject
-       string in between the prior call  to  pcre2_match()  and  pcre2_substi-
-       tute(),  as the substitution assumes that the passed-in ovector is com-
-       patible with the subject string. Although PCRE2 does  verify  that  the
-       subject  is  a  pointer to the same buffer, it cannot in general verify
-       whether the contents of the buffer have changed. For  example,  if  the
-       subject  buffer is mutated from one valid UTF-8 string to another valid
-       string, of the same length in code units, the ovector  offsets  are  no
-       longer  guaranteed  to  point  to the start of a character. Beware that
-       with PCRE2_SUBSTITUTE_MATCHED in UTF mode, the subject  string  is  not
+       When using PCRE2_SUBSTITUTE_MATCHED, you should not modify the  subject
+       string  in  between  the  prior call to pcre2_match() and pcre2_substi-
+       tute(), as the substitution assumes that the passed-in ovector is  com-
+       patible  with  the  subject string. Although PCRE2 does verify that the
+       subject is a pointer to the same buffer, it cannot  in  general  verify
+       whether  the  contents  of the buffer have changed. For example, if the
+       subject buffer is mutated from one valid UTF-8 string to another  valid
+       string,  of  the  same length in code units, the ovector offsets are no
+       longer guaranteed to point to the start of  a  character.  Beware  that
+       with  PCRE2_SUBSTITUTE_MATCHED  in  UTF mode, the subject string is not
        re-scanned for UTF validity when pcre2_substitute() first uses it.
 
-       The  default  action  of  pcre2_substitute() is to return a copy of the
+       The default action of pcre2_substitute() is to return  a  copy  of  the
        subject string with matched substrings replaced. However, if PCRE2_SUB-
-       STITUTE_REPLACEMENT_ONLY is set, only the  replacement  substrings  are
+       STITUTE_REPLACEMENT_ONLY  is  set,  only the replacement substrings are
        returned. In the global case, multiple replacements are concatenated in
-       the  output  buffer.  Substitution  callouts (see below) can be used to
+       the output buffer. Substitution callouts (see below)  can  be  used  to
        separate them if necessary.
 
+       Partial  matching  is supported, with limitations: if matching succeeds
+       but with a  partial  match,  then  pcre2_substitute  returns  PCRE2_ER-
+       ROR_PARTIAL.  When  partial-matching  (either  of PCRE2_PARTIAL_HARD or
+       PCRE2_PARTIAL_SOFT is passed),  then  PCRE2_SUBSTITUTE_REPLACEMENT_ONLY
+       must also be set, or else PCRE2_ERROR_BADOPTION is returned. Similarly,
+       certain  replacement items ($' and $_) cause PCRE2_ERROR_PARTIALSUBS to
+       be returned when partial-matching, even if a complete match is found.
+
        The outlengthptr argument of pcre2_substitute() must point to  a  vari-
        able  that contains the length, in code units, of the output buffer. If
        the function is successful, the value is updated to contain the  length
@@ -4418,11 +4436,11 @@ AUTHOR
 
 REVISION
 
-       Last updated: 19 October 2025
+       Last updated: 08 December 2025
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                     19 October 2025                    PCRE2API(3)
+PCRE2 10.48-RC1                08 December 2025                    PCRE2API(3)
 ------------------------------------------------------------------------------
 
 
@@ -5069,7 +5087,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                     17 October 2025                  PCRE2BUILD(3)
+PCRE2 10.48-RC1                 17 October 2025                  PCRE2BUILD(3)
 ------------------------------------------------------------------------------
 
 
@@ -5502,7 +5520,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                    26 February 2025                PCRE2CALLOUT(3)
+PCRE2 10.48-RC1                26 February 2025                PCRE2CALLOUT(3)
 ------------------------------------------------------------------------------
 
 
@@ -5761,7 +5779,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                      02 June 2025                   PCRE2COMPAT(3)
+PCRE2 10.48-RC1                  02 June 2025                   PCRE2COMPAT(3)
 ------------------------------------------------------------------------------
 
 
@@ -6176,11 +6194,11 @@ JIT FAST PATH API
        The  fast  path  function is called pcre2_jit_match(), and it takes ex-
        actly the same arguments as pcre2_match(). However, the subject  string
        must  be  specified  with  a  length; PCRE2_ZERO_TERMINATED is not sup-
-       ported.  Unsupported  option  bits  (for  example,  PCRE2_ANCHORED  and
-       PCRE2_ENDANCHORED)  are ignored, as is the PCRE2_NO_JIT option. The re-
-       turn values are also the same  as  for  pcre2_match(),  plus  PCRE2_ER-
-       ROR_JIT_BADOPTION if a matching mode (partial or complete) is requested
-       that was not compiled.
+       ported. Unsupported option bits (for example, PCRE2_ANCHORED, PCRE2_EN-
+       DANCHORED, and  PCRE2_COPY_MATCHED_SUBJECT)  are  ignored,  as  is  the
+       PCRE2_NO_JIT  option.  The  return  values  are  also  the  same as for
+       pcre2_match(), plus PCRE2_ERROR_JIT_BADOPTION if a matching mode  (par-
+       tial or complete) is requested that was not compiled.
 
        When  you call pcre2_match(), as well as testing for invalid options, a
        number of other sanity checks are performed on the arguments. For exam-
@@ -6212,11 +6230,11 @@ AUTHOR
 
 REVISION
 
-       Last updated: 22 August 2024
+       Last updated: 08 August 2026
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                     22 August 2024                     PCRE2JIT(3)
+PCRE2 10.48-RC1                 08 August 2026                     PCRE2JIT(3)
 ------------------------------------------------------------------------------
 
 
@@ -6301,7 +6319,7 @@ REVISION
        Copyright (c) 1997-2023 University of Cambridge.
 
 
-PCRE2 10.47                    03 September 2025                PCRE2LIMITS(3)
+PCRE2 10.48-RC1                03 September 2025                PCRE2LIMITS(3)
 ------------------------------------------------------------------------------
 
 
@@ -6534,7 +6552,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                    22 February 2025               PCRE2MATCHING(3)
+PCRE2 10.48-RC1                22 February 2025               PCRE2MATCHING(3)
 ------------------------------------------------------------------------------
 
 
@@ -6903,6 +6921,20 @@ MULTI-SEGMENT MATCHING WITH pcre2_dfa_match()
        on the second buffer, you can then try a new match starting  at  offset
        n+1 in the first buffer.
 
+       Therefore,  PCRE2_DFA_RESTART  does not remove the need to keep earlier
+       subject data. In order to perform a bumpalong and continue matching  at
+       the  next character, all subject data from the current match start must
+       be retained, together with enough preceding data  to  satisfy  the  re-
+       quirements   of   lookbehind  assertions  (remembering  as  above  that
+       PCRE2_INFO_MAXLOOKBEHIND only describes the  buffer  requirement  of  a
+       single  lookbehind,  and  nested lookbehinds can read back further from
+       the  match  start).  This  makes  streaming  match   processing   using
+       PCRE2_DFA_RESTART  challenging, and the application cannot easily set a
+       bound on the number of chunks to buffer.  For  multi-segment  searching
+       that is intended to produce the same result as searching the whole sub-
+       ject,  it is usually simpler to avoid PCRE2_DFA_RESTART and run a fresh
+       match, using either matching function, over the retained text.
+
 
 AUTHOR
 
@@ -6913,11 +6945,11 @@ AUTHOR
 
 REVISION
 
-       Last updated: 27 November 2024
+       Last updated: 16 August 2026
        Copyright (c) 1997-2019 University of Cambridge.
 
 
-PCRE2 10.47                    27 November 2024                PCRE2PARTIAL(3)
+PCRE2 10.48-RC1                 16 August 2026                 PCRE2PARTIAL(3)
 ------------------------------------------------------------------------------
 
 
@@ -10105,7 +10137,7 @@ RECURSIVE PATTERNS
 
    Recursion and subroutines with returned capture groups
 
-       Since  PCRE2  10.46,  recursion and subroutine calls may also specify a
+       Since  PCRE2  10.47,  recursion and subroutine calls may also specify a
        list of capture groups to return. This is a PCRE2 syntax extension  not
        supported  by  Perl.  The pattern matching recurses into the referenced
        expression as described above, however, when the recursion  returns  to
@@ -10782,11 +10814,11 @@ AUTHOR
 
 REVISION
 
-       Last updated: 03 September 2025
+       Last updated: 25 October 2025
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                    03 September 2025               PCRE2PATTERN(3)
+PCRE2 10.48-RC1                 25 October 2025                PCRE2PATTERN(3)
 ------------------------------------------------------------------------------
 
 
@@ -11041,7 +11073,7 @@ REVISION
        Copyright (c) 1997-2022 University of Cambridge.
 
 
-PCRE2 10.47                    06 December 2022                PCRE2PERFORM(3)
+PCRE2 10.48-RC1                06 December 2022                PCRE2PERFORM(3)
 ------------------------------------------------------------------------------
 
 
@@ -11399,7 +11431,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                    27 November 2024                  PCRE2POSIX(3)
+PCRE2 10.48-RC1                27 November 2024                  PCRE2POSIX(3)
 ------------------------------------------------------------------------------
 
 
@@ -11493,7 +11525,7 @@ REVISION
        Copyright (c) 1997-2016 University of Cambridge.
 
 
-PCRE2 10.47                    28 February 2025                 PCRE2SAMPLE(3)
+PCRE2 10.48-RC1                28 February 2025                 PCRE2SAMPLE(3)
 ------------------------------------------------------------------------------
 PCRE2SERIALIZE(3)          Library Functions Manual          PCRE2SERIALIZE(3)
 
@@ -11684,7 +11716,7 @@ REVISION
        Copyright (c) 1997-2018 University of Cambridge.
 
 
-PCRE2 10.47                     19 January 2024              PCRE2SERIALIZE(3)
+PCRE2 10.48-RC1                 19 January 2024              PCRE2SERIALIZE(3)
 ------------------------------------------------------------------------------
 
 
@@ -12416,7 +12448,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                     14 October 2025                 PCRE2SYNTAX(3)
+PCRE2 10.48-RC1                 14 October 2025                 PCRE2SYNTAX(3)
 ------------------------------------------------------------------------------
 
 
@@ -12911,7 +12943,7 @@ REVISION
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                    27 November 2024                PCRE2UNICODE(3)
+PCRE2 10.48-RC1                27 November 2024                PCRE2UNICODE(3)
 ------------------------------------------------------------------------------
 
 
index 9065fd8a31ec4a788226aa00d18625d7f146bf30..32bfa33669870ac490259de7a34e27a3a92c497c 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_COMPILE 3 "23 March 2017" "PCRE2 10.47"
+.TH PCRE2_COMPILE 3 "23 March 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 9b6526fc19e0a9218010035f4468da5080d7c5a0..c5038abaa95b82629bbbe76817e8a11e47c04958 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CODE_COPY 3 "22 November 2016" "PCRE2 10.47"
+.TH PCRE2_CODE_COPY 3 "22 November 2016" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 3896577d84096ed213f595542009a20a3e1945c5..4252e6dfcfacc2da88a31cd079ba2aef092decab 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CODE_COPY 3 "16 January 2017" "PCRE2 10.47"
+.TH PCRE2_CODE_COPY 3 "16 January 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ca660e800e44fefd67c713fd19415fc67beef51e..a538b1e75579551ed1d22d43e00ca77dd7aefda1 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CODE_FREE 3 "28 June 2018" "PCRE2 10.47"
+.TH PCRE2_CODE_FREE 3 "28 June 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index eb408146da2734021b0aa4901a318aefb8b5a863..ec3bb9a87d47b5657213d751150b651c281167ee 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_COMPILE 3 "30 October 2024" "PCRE2 10.47"
+.TH PCRE2_COMPILE 3 "30 October 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index c3353b5595661993ec692ba0c21f5c48024d2d66..15a85fbd57b616e23d0f585fca6acb308ea25a74 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_COMPILE_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_COMPILE_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index f094977044888d94cd1bc5ec9d564fbc2d114c88..87f7b52343715eea07700977fd84d25a7e7400ee 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_COMPILE_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_COMPILE_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ded964eb6e0ec6da548a5a9efa786c35e20c18ab..d51fc9d85a389428b0055e180cc26d36c077363a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_COMPILE_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.47"
+.TH PCRE2_COMPILE_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index e109180f510a838083068615945ffab7a0f2ec3a..785bd00511533b5e981439b874c8123cda671a1b 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CONFIG 3 "03 September 2025" "PCRE2 10.47"
+.TH PCRE2_CONFIG 3 "03 September 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 32073f0f643b026dbbe4956820eacd6a1c6cad79..2c9e78bd62c24123216466396519be6c58c091f3 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CONVERT_CONTEXT_COPY 3 "12 July 2017" "PCRE2 10.47"
+.TH PCRE2_CONVERT_CONTEXT_COPY 3 "12 July 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 6a5c9be008cf1a7493c3b40014666d26d5068e47..7a5589439484fd5c95bb708c0adcd92e94171ee3 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CONVERT_CONTEXT_CREATE 3 "12 July 2017" "PCRE2 10.47"
+.TH PCRE2_CONVERT_CONTEXT_CREATE 3 "12 July 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 7fbda349be719b3726e44bf89cabcc23994bee6e..874982b3b59f0f656c414de72976534b2647694e 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CONVERT_CONTEXT_FREE 3 "13 August 2018" "PCRE2 10.47"
+.TH PCRE2_CONVERT_CONTEXT_FREE 3 "13 August 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 3b09fe7d82ad1bd0f7d44bd4044f7ea52e15059d..b195236661c0c2c7d88c6493cccad664a84c9399 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_CONVERTED_PATTERN_FREE 3 "13 August 2018" "PCRE2 10.47"
+.TH PCRE2_CONVERTED_PATTERN_FREE 3 "13 August 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 4a4673b8d904cace16052335a66638bfb52216eb..f6ee61372647118ebc7a6e12c3ea309a73937ffb 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_DFA_MATCH 3 "31 August 2021" "PCRE2 10.47"
+.TH PCRE2_DFA_MATCH 3 "31 August 2021" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 1f73772a75794b46afda606ce95b52cc96a6ccee..0de6743965ff4a0522ed66b492701278a0b1a615 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GENERAL_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_GENERAL_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index cd9e1b590ae142249a70f5d02ea52a7b87dedcff..d35dfa2606d89b3d6e60a5d27fa5bd43eb9d2636 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GENERAL_CONTEXT_CREATE 3 "23 January 2023" "PCRE2 10.47"
+.TH PCRE2_GENERAL_CONTEXT_CREATE 3 "23 January 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 3d69d139ddb9c5bbf645ad0dea77d3aa72e1ac6c..b056780a5e4e4fb482a3587a50e0e27a2f43ee0b 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GENERAL_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.47"
+.TH PCRE2_GENERAL_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index cffc5730d3fe8943fc2af7a7b7025298ba2b8b51..d7b66577e78cd53759a8c059575c7491fccebdb6 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_ERROR_MESSAGE 3 "24 March 2017" "PCRE2 10.47"
+.TH PCRE2_GET_ERROR_MESSAGE 3 "24 March 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 6d2910607bc6e4107af4c2fb7b9bd9b8feac1cc3..4ead97a5f66eccd5a5d49892f55bb44fa1bae13a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_MARK 3 "13 January 2018" "PCRE2 10.47"
+.TH PCRE2_GET_MARK 3 "13 January 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 555bcd2c623c88c321c30ec5df44a980b1ede67c..b10e663c4470f47d5267e4d76d5177e888f27697 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_MATCH_DATA_HEAPFRAMES_SIZE 3 "18 January 2023" "PCRE2 10.47"
+.TH PCRE2_GET_MATCH_DATA_HEAPFRAMES_SIZE 3 "18 January 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 3ebc4fd4116906a73817f4429ccdb6fe937fe45f..e7940b55bc1de6057e371076ce5b5a6ac55cf685 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_MATCH_DATA_SIZE 3 "17 October 2019" "PCRE2 10.47"
+.TH PCRE2_GET_MATCH_DATA_SIZE 3 "17 October 2019" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 23f072dd184915429c42316103f60fba1e929ca7..b6ef0e6dc67965d62f1a29e76fdd8cc1011484eb 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_OVECTOR_COUNT 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_GET_OVECTOR_COUNT 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 7d9ec1eaec8d251353b358e8552b8d138fed090e..5a0d16862478ba3d023b279a7719724b7939ebb0 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_OVECTOR_POINTER 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_GET_OVECTOR_POINTER 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index b9c4f7b752bcd2ad9aaac334e74df0d78f037a66..bd1bf168618bb7440cb986beae4d2651fd05ec82 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_GET_STARTCHAR 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_GET_STARTCHAR 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 9961d470b7dd962cbe3ac7c5881137c563d0b499..410e2d21970839377087ebbdd0a6ff901c9d3576 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_JIT_COMPILE 3 "22 August 2024" "PCRE2 10.47"
+.TH PCRE2_JIT_COMPILE 3 "22 August 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index fa1073aaa1c0637c1e86729651677a8907c7cd1a..ec7ea363686024901945589808eff3dd4ac1e4cd 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_JIT_FREE_UNUSED_MEMORY 3 "24 April 2020" "PCRE2 10.47"
+.TH PCRE2_JIT_FREE_UNUSED_MEMORY 3 "24 April 2020" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index e147b908c5491069fbc2a370b8c37ca76a16557b..e82c129e2fc678ee970d4c2b8073c150963c6e79 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_JIT_MATCH 3 "20 January 2023" "PCRE2 10.47"
+.TH PCRE2_JIT_MATCH 3 "20 January 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 61fc963753834ed523731d7a646aed712fd319d0..763c8b5bf932e20dfbd0fa35698280337b6b992d 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_JIT_STACK_ASSIGN 3 "13 August 2018" "PCRE2 10.47"
+.TH PCRE2_JIT_STACK_ASSIGN 3 "13 August 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 494eee8c1bead459c6b3dc5ed57a9ac078e3760f..055bb9d605462db2968dc821be40407481fb2a1a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_JIT_STACK_CREATE 3 "23 January 2023" "PCRE2 10.47"
+.TH PCRE2_JIT_STACK_CREATE 3 "23 January 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 0b8875980a3c4fd32f78d4c426d92755e7ac977b..d8fb298cdf02431bea2ef42ce95424f65b33d574 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_JIT_STACK_FREE 3 "26 February 2025" "PCRE2 10.47"
+.TH PCRE2_JIT_STACK_FREE 3 "26 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index b42933ff8937313efb790ef5fc67ebfb2f339f2a..119184219d1adff1f9da10d2cc3335a525ca5457 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MAKETABLES 3 "26 February 2025" "PCRE2 10.47"
+.TH PCRE2_MAKETABLES 3 "26 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 4b835c3c3c3373fb97031d7eec699576b5d1fb0f..819a6b68167748df4a1010d92c0fc41851d73a1b 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MAKETABLES_FREE 3 "03 September 2019" "PCRE2 10.47"
+.TH PCRE2_MAKETABLES_FREE 3 "03 September 2019" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 5701b75b1875cac6456dc3ee03acbc9f2fd75c40..69c31f14b3fc7c7f7e695be785b690b5f581a731 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH 3 "27 January 2024" "PCRE2 10.47"
+.TH PCRE2_MATCH 3 "27 January 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index cbce67a74010dc1410ee60c37a716251e6835461..d35153fffa3d04c9828a7b80431c608d54c8abd9 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_MATCH_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ab624a34f609b9817ac8dcd014e25eb891a8190f..e616453fcc796d20203627381f8c1104051f23a8 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_MATCH_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index e0a4d62094dab19e1f00491402f8fe6e73252c6c..93844b0f25614ff22442de49b6394d307c222e61 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.47"
+.TH PCRE2_MATCH_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 49ee2894e98772b004097dcf18b725afbd6bfd2b..ca8aad6c2173c4d20233cf14ea363d4c3339aa33 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH_DATA_CREATE 3 "28 August 2021" "PCRE2 10.47"
+.TH PCRE2_MATCH_DATA_CREATE 3 "28 August 2021" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index d105b6251a0951bb49b84ccfb87cf17380abbf4a..c9d949586d3657fe37c0ab830d70dee487dd9a36 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH_DATA_CREATE_FROM_PATTERN 3 "11 August 2025" "PCRE2 10.47"
+.TH PCRE2_MATCH_DATA_CREATE_FROM_PATTERN 3 "11 August 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 245b3e253ee2838e4296c117fc8086840bcb9be4..9cf7f5ce589e96fc240716da1aed00c4ae83bffe 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_MATCH_DATA_FREE 3 "16 August 2023" "PCRE2 10.47"
+.TH PCRE2_MATCH_DATA_FREE 3 "16 August 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 4c8f4e92f7144c9bbd7266f4528f85f4ba209e7b..b38eba3ddcba6f1778890a11f712623041ceaf9c 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_NEXT_MATCH 3 "24 March 2025" "PCRE2 10.47"
+.TH PCRE2_NEXT_MATCH 3 "24 March 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 4302c52c7ec25e9a2e0d7cc3bf1c856c361eb3e1..41f45e7fd06a00a8bd6609598a80d2f5578558f2 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_PATTERN_CONVERT 3 "12 July 2017" "PCRE2 10.47"
+.TH PCRE2_PATTERN_CONVERT 3 "12 July 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index aa8c66203fee2fb8e8dfc5d870f1c7a8dc68d79e..c40328e1b3b13482a44557d805f94df19f4635f4 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_PATTERN_INFO 3 "14 February 2019" "PCRE2 10.47"
+.TH PCRE2_PATTERN_INFO 3 "14 February 2019" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 363d73c271aa20e48a0df6e0d040b88af2260f84..2a9e401d6c4fed85b687f07c1a6407942c70c176 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SERIALIZE_DECODE 3 "22 April 2022" "PCRE2 10.47"
+.TH PCRE2_SERIALIZE_DECODE 3 "22 April 2022" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ca0ff3b9d8994da529e252475cb29fccb9ba9b11..0fff1744a6159eabeb30a1b5fdcc354d848dab7f 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SERIALIZE_ENCODE 3 "13 August 2018" "PCRE2 10.47"
+.TH PCRE2_SERIALIZE_ENCODE 3 "13 August 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index fc563de24382fabce3854713bc3d55c262d7ecdb..ec1d68dacfc030e478366da2682b47b253ca9b92 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SERIALIZE_FREE 3 "13 August 2018" "PCRE2 10.47"
+.TH PCRE2_SERIALIZE_FREE 3 "13 August 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 9cb0fbb8d45d9bb460c96f16a03a187aa9d06a8a..35329e96eca088e864942ad976fa74ee6ae2781f 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SERIALIZE_GET_NUMBER_OF_CODES 3 "13 August 2018" "PCRE2 10.47"
+.TH PCRE2_SERIALIZE_GET_NUMBER_OF_CODES 3 "13 August 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index a0d601478201fbc70016ed5461ea80c05a73beda..71e7756ad4d3923ae72eee7ed56d26b35667ce76 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_BSR 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_SET_BSR 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index a71dd7ea22145829f13ee497ce24ab322f805a7a..4d2090d9cf0404d03f0ef2d85ea918414f32fd29 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_CALLOUT 3 "25 March 2017" "PCRE2 10.47"
+.TH PCRE2_SET_CALLOUT 3 "25 March 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index e6d050330f81bfe82676564370c36a9a987becb5..4e173996fedc389705cd737492f66a9e7c51b462 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_CHARACTER_TABLES 3 "15 April 2020" "PCRE2 10.47"
+.TH PCRE2_SET_CHARACTER_TABLES 3 "15 April 2020" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 56e8e0014c692d994ebed2d77efede44c540a01e..d1d414b7451c7457439e90640ec63c71f6bf86cb 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_COMPILE_EXTRA_OPTIONS 3 "14 October 2024" "PCRE2 10.47"
+.TH PCRE2_SET_COMPILE_EXTRA_OPTIONS 3 "14 October 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 44ed68571b98902d654966306cc8f0b4ca853b4e..de03c25c5af3f5e6dd0eee58c645602268d0b7a9 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_COMPILE_RECURSION_GUARD 3 "26 November 2014" "PCRE2 10.47"
+.TH PCRE2_SET_COMPILE_RECURSION_GUARD 3 "26 November 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index a816a0c906f5f2e40f3bc30406b8c5ed20448fdf..7203f1cc5681281e1caf5461be7f2c7058881b8a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_DEPTH_LIMIT 3 "25 March 2017" "PCRE2 10.47"
+.TH PCRE2_SET_DEPTH_LIMIT 3 "25 March 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 89c2ee383d8d6ca9d353412b4a739c5ed1480a22..93cbcd4ed8e1d828bd04f17a6e56f6f89779c355 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_GLOB_ESCAPE 3 "12 July 2017" "PCRE2 10.47"
+.TH PCRE2_SET_GLOB_ESCAPE 3 "12 July 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 14e8e2fba4e1b7a2d117cbb35ccf4a9e5c89cfb8..bafbe887526b58de13780c86eb26dece6cf81c47 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_GLOB_SEPARATOR 3 "17 June 2018" "PCRE2 10.47"
+.TH PCRE2_SET_GLOB_SEPARATOR 3 "17 June 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 05a69f187a94e496a06aae53fafe26a77aad6748..5cfc7148b99d27e1d78d148642b9d0b3708fdebc 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_HEAP_LIMIT 3 "17 June 2018" "PCRE2 10.47"
+.TH PCRE2_SET_HEAP_LIMIT 3 "17 June 2018" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index d5e34c1130c3b54a0e2cc2cd1be93eb19ee4f3b4..5e809ad9bb6cc75c17d354d3ca7286554290c902 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_MATCH_LIMIT 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_SET_MATCH_LIMIT 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index bfb7fe0be20fe8ea9b6d1fe874b260e22e2f88c4..d931821a2ed506efbbd065ca6c74dec8c22917dd 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "09 June 2024" "PCRE2 10.47"
+.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "09 June 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 7d5aa850a593e327f6ea438ee327d76be4ddc08a..be5b388323f29312eb7d4c9185eb450a3933fa2e 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_MAX_PATTERN_LENGTH 3 "05 October 2016" "PCRE2 10.47"
+.TH PCRE2_SET_MAX_PATTERN_LENGTH 3 "05 October 2016" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 95bb2734e308be8045794bdc87130f3bf238274b..98d9f917331bde7609dad6bde9afd4a32d38e94f 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_NEWLINE 3 "11 August 2023" "PCRE2 10.47"
+.TH PCRE2_SET_NEWLINE 3 "11 August 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 40aae44a7b69dfc0032201b98e7d9fde63a49d52..f22713826f2ab879af9aafacfafcff79e5696ae7 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_NEWLINE 3 "19 July 2017" "PCRE2 10.47"
+.TH PCRE2_SET_NEWLINE 3 "19 July 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 031b376da3bd6f4430a64c3863e13aaf7276c72b..19476c05e1f3b574d5e071a9a9a3b390bd33adcd 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_OFFSET_LIMIT 3 "22 September 2015" "PCRE2 10.47"
+.TH PCRE2_SET_OFFSET_LIMIT 3 "22 September 2015" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 499cd62712713430638960d8836b3de8234867c9..12ae23a7c17933984cd862943c704994d930cb90 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_OPTIMIZE 3 "22 September 2024" "PCRE2 10.47"
+.TH PCRE2_SET_OPTIMIZE 3 "22 September 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index bc19bf0833f152ad688adfed856f0b23a0459edd..3103ffd64f8a4eb59077df7a0c983805a94696e7 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_PARENS_NEST_LIMIT 3 "25 October 2014" "PCRE2 10.47"
+.TH PCRE2_SET_PARENS_NEST_LIMIT 3 "25 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index c0bc551146e471e4b617f4c9fc4834db4517001b..c5e581749a5ef66d456c20fc634f8e02dc0e6c4b 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_RECURSION_LIMIT 3 "19 July 2017" "PCRE2 10.47"
+.TH PCRE2_SET_RECURSION_LIMIT 3 "19 July 2017" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 392e51425e3c1e98baab56c64855c047b2af48e6..2de1ac6cfc17c08c63d402d462bd75250e2b633f 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_RECURSION_MEMORY_MANAGEMENT 3 "23 January 2023" "PCRE2 10.47"
+.TH PCRE2_SET_RECURSION_MEMORY_MANAGEMENT 3 "23 January 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index a10359ab384d19dbff33c46e38ad67cd66614870..819e0a1fb477c4b00e6ce4b420f0eb671748697c 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_SUBSTITUTE_CALLOUT 3 "04 October 2024" "PCRE2 10.47"
+.TH PCRE2_SET_SUBSTITUTE_CALLOUT 3 "04 October 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ab2f8f41bb726699e9aa613827855ec16944da77..1ede07b44b242b78e83c9c11b450a81e09df1f69 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SET_SUBSTITUTE_CASE_CALLOUT 3 "26 December 2024" "PCRE2 10.47"
+.TH PCRE2_SET_SUBSTITUTE_CASE_CALLOUT 3 "26 December 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index b1fbd0c5c6866080dd00511971e05acb02461cbb..666a1870b3f5fc879438d44a6f914f51b34cc052 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTITUTE 3 "03 October 2025" "PCRE2 10.47"
+.TH PCRE2_SUBSTITUTE 3 "03 October 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 78d05f4066da9af434674d4587ba9f8d0cd1e9e0..24d986ba92a4ef8ffb4f6c391bea5fc869f4360f 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_COPY_BYNAME 3 "19 December 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_COPY_BYNAME 3 "19 December 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index bb0e1ec0afb50451bd085e33a57e1f460f0bcecd..f8fcb7abfe565e78258788efe5538661d4fc2a56 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_COPY_BYNUMBER 3 "13 December 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_COPY_BYNUMBER 3 "13 December 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 47d13ed6c253debcd8a9f1caa77d87a011ac2502..10c5377b212ddd7da6480c7f70fc5a947464cf1a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_FREE 3 "26 February 2025" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_FREE 3 "26 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 23abdafc67715f613d58b4b379c7f66e5af9be29..ccdddd9e3e35c07539c76dff2b2e7d79b6b75561 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_GET_BYNAME 3 "19 December 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_GET_BYNAME 3 "19 December 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ffa9dc67c819f93c5c7207093381cb8a4f7a3d1b..d7fd8be8c3179f60c69df43114acefd255d9c888 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_GET_BYNUMBER 3 "13 December 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_GET_BYNUMBER 3 "13 December 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index d9cc946a71b0c12831f040155f18b87f63d07d89..cbb442890c6690856e677ac7e82fd7c0f27b0fa3 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_LENGTH_BYNAME 3 "26 September 2025" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_LENGTH_BYNAME 3 "26 September 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 10e5233a8194df1b04cceba39a376e49f0f58516..150395743e5e2564c6c746b7dff1fc77b2d26877 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_LENGTH_BYNUMBER 3 "22 December 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_LENGTH_BYNUMBER 3 "22 December 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index ee78b4e1a85d978c82a30e5dbe6ecf340f2d5b94..c31e5e503b98bcd407dcaeacec3947d972cca137 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_LIST_FREE 3 "26 February 2025" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_LIST_FREE 3 "26 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 50b50e4884ea99a33dfa113f99ed0d5cbfa2ef43..9a5db54325a1fa2c4116b2f9545a034e48b789a3 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_LIST_GET 3 "21 October 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_LIST_GET 3 "21 October 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index fb93b2f92ea0abacb9e4b5895ddcb9b572a36d5d..0898b0b85841f80c42039ed9f9893413c089e187 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_NAMETABLE_SCAN 3 "06 February 2019" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_NAMETABLE_SCAN 3 "06 February 2019" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index b9be3b56f6faaf1d842e2122ae8f8b78c5b32806..e5aa7f9d45ccd3ada4a4c1c54776745790e5ae4a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2_SUBSTRING_NUMBER_FROM_NAME 3 "03 November 2014" "PCRE2 10.47"
+.TH PCRE2_SUBSTRING_NUMBER_FROM_NAME 3 "03 November 2014" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index a5ea17b55551391994ea6bfcd86282bc86eb220a..f3df177905a9da3a2861f93ca10b23596b6d3bf0 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2API 3 "19 October 2025" "PCRE2 10.47"
+.TH PCRE2API 3 "08 December 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .sp
@@ -1296,14 +1296,18 @@ documentation for more details.
 .sp
   PCRE2_CONFIG_JITTARGET
 .sp
-The \fIwhere\fP argument should point to a buffer that is at least 64 code
-units long. (The exact length required can be found by calling
-\fBpcre2_config()\fP with \fBwhere\fP set to NULL.) The buffer is filled with a
-string that contains the name of the architecture for which the JIT compiler is
-configured, for example "x86 32bit (little endian + unaligned)". If JIT support
-is not available, PCRE2_ERROR_BADOPTION is returned, otherwise the number of
-code units used is returned. This is the length of the string, plus one unit
-for the terminating zero.
+The \fIwhere\fP argument should point to a code-unit-aligned buffer. All
+previous versions of PCRE2 have required no more than 128 code units of buffer
+capacity. However, this requirement is not guaranteed to be maintained, so
+applications should call \fBpcre2_config()\fP with \fBwhere\fP set to NULL to
+receive the required buffer size, then assert or allocate a suitably-size buffer
+for a second call to \fBpcre2_config()\fP. The buffer is filled with a string
+that contains the name of the architecture for which the JIT compiler is
+configured at build time, for example, a 64-bit ARM CPU that supports the
+Armv8.1 extension writes "ARM-64 (LSE) 64bit (little endian + unaligned)". If
+JIT support is not available, PCRE2_ERROR_BADOPTION is returned; otherwise the
+number of code units used is returned. This is the length of the string plus one
+unit for the terminating zero.
 .sp
   PCRE2_CONFIG_LINKSIZE
 .sp
@@ -1373,13 +1377,15 @@ below.
 .sp
   PCRE2_CONFIG_UNICODE_VERSION
 .sp
-The \fIwhere\fP argument should point to a buffer that is at least 24 code
-units long. (The exact length required can be found by calling
-\fBpcre2_config()\fP with \fBwhere\fP set to NULL.) If PCRE2 has been compiled
-without Unicode support, the buffer is filled with the text "Unicode not
-supported". Otherwise, the Unicode version string (for example, "8.0.0") is
-inserted. The number of code units used is returned. This is the length of the
-string plus one unit for the terminating zero.
+The \fIwhere\fP argument should point to a code-unit-aligned buffer. All
+previous versions of PCRE2 have required no more than 24 code units of buffer
+capacity. However, applications should call \fBpcre2_config()\fP with
+\fBwhere\fP set to NULL to receive the required buffer size, then assert or
+allocate a suitably-size buffer for a second call to \fBpcre2_config()\fP. If
+PCRE2 has been compiled without Unicode support, the buffer is filled with the
+text "Unicode not supported". Otherwise, the Unicode version string (for
+example, "8.0.0") is written. The number of code units used is returned. This is
+the length of the string plus one unit for the terminating zero.
 .sp
   PCRE2_CONFIG_UNICODE
 .sp
@@ -1388,12 +1394,14 @@ available; otherwise it is set to zero. Unicode support implies UTF support.
 .sp
   PCRE2_CONFIG_VERSION
 .sp
-The \fIwhere\fP argument should point to a buffer that is at least 24 code
-units long. (The exact length required can be found by calling
-\fBpcre2_config()\fP with \fBwhere\fP set to NULL.) The buffer is filled with
-the PCRE2 version string, zero-terminated. The number of code units used is
-returned. This is the length of the string plus one unit for the terminating
-zero.
+The \fIwhere\fP argument should point to a code-unit-aligned buffer. All
+previous versions of PCRE2 have required no more than 24 code units of buffer
+capacity. However, applications should call \fBpcre2_config()\fP with
+\fBwhere\fP set to NULL to receive the required buffer size, then assert or
+allocate a suitably-size buffer for a second call to \fBpcre2_config()\fP. The
+buffer is filled with the PCRE2 version string, zero-terminated. The number of
+code units used is returned. This is the length of the string plus one unit for
+the terminating zero.
 .
 .
 .\" HTML <a name="compiling"></a>
@@ -3543,7 +3551,7 @@ A common task for applications is to implement "global" matching behaviour,
 for example, replacing all matches in the subject; splitting the subject on all
 matches; or simply counting the number of matches. The \fBpcre2_next_match()\fP
 function helps with this task by providing the appropriate parameters for the
-next match attempt (available since PCRE2 10.46).
+next match attempt (available since PCRE2 10.47).
 .P
 First, a match attempt should be made using one of the matching functions
 (\fBpcre2_match()\fP, \fBpcre2_dfa_match()\fP, or \fBpcre2_jit_match()\fP).
@@ -3920,6 +3928,14 @@ below)
 .\"
 can be used to separate them if necessary.
 .P
+Partial matching is supported, with limitations: if matching succeeds but with a
+partial match, then pcre2_substitute returns PCRE2_ERROR_PARTIAL. When
+partial-matching (either of PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT is passed),
+then PCRE2_SUBSTITUTE_REPLACEMENT_ONLY must also be set, or else
+PCRE2_ERROR_BADOPTION is returned. Similarly, certain replacement items
+($' and $_) cause PCRE2_ERROR_PARTIALSUBS to be returned when partial-matching,
+even if a complete match is found.
+.P
 The \fIoutlengthptr\fP argument of \fBpcre2_substitute()\fP must point to a
 variable that contains the length, in code units, of the output buffer. If the
 function is successful, the value is updated to contain the length in code
@@ -4606,6 +4622,6 @@ Cambridge, England.
 .rs
 .sp
 .nf
-Last updated: 19 October 2025
+Last updated: 08 December 2025
 Copyright (c) 1997-2024 University of Cambridge.
 .fi
index e7af55a4d9906851222eb3042c864dcdc493fb2e..fa1212155032942ba110ebd1aee687ba651fe012 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2BUILD 3 "17 October 2025" "PCRE2 10.47"
+.TH PCRE2BUILD 3 "17 October 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .
index 6ceefa4a205387be4f39ed6c53b6952e2cc46e81..f1bacb84eb2deb73772b2953c9b7fa280454c407 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2CALLOUT 3 "26 February 2025" "PCRE2 10.47"
+.TH PCRE2CALLOUT 3 "26 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH SYNOPSIS
index 0a6dc1bffc4decad8f948383ddfaae9987fb2eab..3ea2881332a453be4884e5fcc9f19653b1767740 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2COMPAT 3 "02 June 2025" "PCRE2 10.47"
+.TH PCRE2COMPAT 3 "02 June 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "DIFFERENCES BETWEEN PCRE2 AND PERL"
index 82448b5478d5abec9b021989a37b7e31a3589ca6..ac1495b2d2dffa9522b7b3ec3c852c9cfe185045 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2CONVERT 3 "14 November 2023" "PCRE2 10.47"
+.TH PCRE2CONVERT 3 "14 November 2023" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "EXPERIMENTAL PATTERN CONVERSION FUNCTIONS"
index fa08962cb7fd0dcee41724128d457acaee3bcfa9..2d258aff579828c5dea091d382b178edab659dd4 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2DEMO 3 "24 March 2025" "PCRE2 10.47"
+.TH PCRE2DEMO 3 "24 March 2025" "PCRE2 10.48-RC1"
 .\"AUTOMATICALLY GENERATED BY UpdateAlways - do not EDIT!
 .SH NAME
 PCRE2DEMO - A demonstration C program for PCRE2
index 559d923ac95cd171b867ec63bf13c062a2326567..d7104bbe128f1ae81d60b1ec727e37866029ddf7 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2GREP 1 "24 January 2025" "PCRE2 10.47"
+.TH PCRE2GREP 1 "24 January 2025" "PCRE2 10.48-RC1"
 .SH NAME
 pcre2grep - a grep with Perl-compatible regular expressions.
 .SH SYNOPSIS
index 55e362ab06ef620cf7066c06ec84886bbe8ede09..484275545f37b5900445e14660545d62a9063d53 100644 (file)
@@ -1103,4 +1103,4 @@ REVISION
        Copyright (c) 1997-2023 University of Cambridge.
 
 
-PCRE2 10.47                     24 January 2025                   PCRE2GREP(1)
+PCRE2 10.48-RC1                 24 January 2025                   PCRE2GREP(1)
index 620b40ce238df838a7220f6b314e96987548ff23..23dcb91a2d04375bcd8b436c63f1415ee2c52b9a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2JIT 3 "22 August 2024" "PCRE2 10.47"
+.TH PCRE2JIT 3 "08 August 2026" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PCRE2 JUST-IN-TIME COMPILER SUPPORT"
@@ -444,10 +444,11 @@ processed by \fBpcre2_jit_compile()\fP).
 The fast path function is called \fBpcre2_jit_match()\fP, and it takes exactly
 the same arguments as \fBpcre2_match()\fP. However, the subject string must be
 specified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported
-option bits (for example, PCRE2_ANCHORED and PCRE2_ENDANCHORED) are ignored, as
-is the PCRE2_NO_JIT option. The return values are also the same as for
-\fBpcre2_match()\fP, plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial
-or complete) is requested that was not compiled.
+option bits (for example, PCRE2_ANCHORED, PCRE2_ENDANCHORED, and
+PCRE2_COPY_MATCHED_SUBJECT) are ignored, as is the PCRE2_NO_JIT option. The
+return values are also the same as for \fBpcre2_match()\fP, plus
+PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested
+that was not compiled.
 .P
 When you call \fBpcre2_match()\fP, as well as testing for invalid options, a
 number of other sanity checks are performed on the arguments. For example, if
@@ -484,6 +485,6 @@ Cambridge, England.
 .rs
 .sp
 .nf
-Last updated: 22 August 2024
+Last updated: 08 August 2026
 Copyright (c) 1997-2024 University of Cambridge.
 .fi
index b5122ed98a2a4f2eb116adaf64660e54d600f5fb..9b8e6a6265468bda8e83bf305f2fc47f97f9418e 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2LIMITS 3 "03 September 2025" "PCRE2 10.47"
+.TH PCRE2LIMITS 3 "03 September 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "SIZE AND OTHER LIMITATIONS"
index f84b071b324e5eb5f15bae4d4c3bf1459a595c45..23f6eb4be3f048a4a8e26b86c434913fcb6a09be 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2MATCHING 3 "22 February 2025" "PCRE2 10.47"
+.TH PCRE2MATCHING 3 "22 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PCRE2 MATCHING ALGORITHMS"
index 42a5c36af8ce6cbcd0992d0bb393a74464314d67..b55630e809caa7cb9ceb707d02a0d1cb4801fafe 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2PARTIAL 3 "27 November 2024" "PCRE2 10.47"
+.TH PCRE2PARTIAL 3 "16 August 2026" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PARTIAL MATCHING IN PCRE2"
@@ -352,6 +352,19 @@ as described for \fBpcre2_match()\fP above. Another possibility is to work with
 two buffers. If a partial match at offset \fIn\fP in the first buffer is
 followed by "no match" when PCRE2_DFA_RESTART is used on the second buffer, you
 can then try a new match starting at offset \fIn+1\fP in the first buffer.
+.P
+Therefore, PCRE2_DFA_RESTART does not remove the need to keep earlier subject
+data. In order to perform a bumpalong and continue matching at the next
+character, all subject data from the current match start must be retained,
+together with enough preceding data to satisfy the requirements of lookbehind
+assertions (remembering as above that PCRE2_INFO_MAXLOOKBEHIND only describes
+the buffer requirement of a single lookbehind, and nested lookbehinds can read
+back further from the match start). This makes streaming match processing
+using PCRE2_DFA_RESTART challenging, and the application cannot easily set a
+bound on the number of chunks to buffer. For multi-segment searching that is
+intended to produce the same result as searching the whole subject, it is
+usually simpler to avoid PCRE2_DFA_RESTART and run a fresh match, using either
+matching function, over the retained text.
 .
 .
 .SH AUTHOR
@@ -368,6 +381,6 @@ Cambridge, England.
 .rs
 .sp
 .nf
-Last updated: 27 November 2024
+Last updated: 16 August 2026
 Copyright (c) 1997-2019 University of Cambridge.
 .fi
index 0ad38db3fbd548b9751c9023fb199d74f3f06f2d..489adc3ffddb794ad81cc41f21eba352a4497393 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2PATTERN 3 "03 September 2025" "PCRE2 10.47"
+.TH PCRE2PATTERN 3 "25 October 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PCRE2 REGULAR EXPRESSION DETAILS"
@@ -3499,7 +3499,7 @@ below.
 .SS "Recursion and subroutines with returned capture groups"
 .rs
 .sp
-Since PCRE2 10.46, recursion and subroutine calls may also specify a list of
+Since PCRE2 10.47, recursion and subroutine calls may also specify a list of
 capture groups to return. This is a PCRE2 syntax extension not supported by
 Perl. The pattern matching recurses into the referenced expression as described
 above, however, when the recursion returns to the calling expression the
@@ -4230,6 +4230,6 @@ Cambridge, England.
 .rs
 .sp
 .nf
-Last updated: 03 September 2025
+Last updated: 25 October 2025
 Copyright (c) 1997-2024 University of Cambridge.
 .fi
index f419559ff5e70f798707f3dafc89a76072622127..1a8c2b56bac30d27e8466bca0a395b3682559421 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2PERFORM 3 "06 December 2022" "PCRE2 10.47"
+.TH PCRE2PERFORM 3 "06 December 2022" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PCRE2 PERFORMANCE"
index 359f0175a5963973b0720bc3fd444119bf2649dd..59cfb77ba2cd38de6e933efef04f1cd3f3445131 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2POSIX 3 "27 November 2024" "PCRE2 10.47"
+.TH PCRE2POSIX 3 "27 November 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "SYNOPSIS"
index 505c3a71a20cea79d11063db4b5ca071822ebf0e..84a8c87bb43597e033ffcab09218f5afee41cddf 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2SAMPLE 3 "28 February 2025" "PCRE2 10.47"
+.TH PCRE2SAMPLE 3 "28 February 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PCRE2 SAMPLE PROGRAM"
index 15aa8fa756144d72b171f284028c4362c73190a4..758e887d2343f7ed46fc6411129585ab3244dc47 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2SERIALIZE 3 "19 January 2024" "PCRE2 10.47"
+.TH PCRE2SERIALIZE 3 "19 January 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "SAVING AND RE-USING PRECOMPILED PCRE2 PATTERNS"
index d1a611be368ffbec4714b1c660011adca9ffef72..b9f23dfdf5ada42d5d22929aa86cee9d5fe25432 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2SYNTAX 3 "14 October 2025" "PCRE2 10.47"
+.TH PCRE2SYNTAX 3 "14 October 2025" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY"
index 7dbc731fd3c9981ec240e57c790a2dd5e7f573e6..f66af14494d52115528ac8b5ab4a313bab33a658 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2TEST 1 "12 October 2025" "PCRE2 10.47"
+.TH PCRE2TEST 1 "22 August 2026" "PCRE2 10.48-RC1"
 .SH NAME
 pcre2test - a program for testing Perl-compatible regular expressions.
 .SH SYNOPSIS
@@ -180,9 +180,11 @@ information. It returns one of the following values:
 If an unknown option is given, an error message is output; the exit code is 0.
 .TP 10
 \fB--colo[u]r[=<always,auto,never>]\fP
-By default, the output is coloured if the output file is a terminal (\fBauto\fP).
-Force or suppress output of ANSI colour escapes with \fBalways\fP and \fBnever\fP
-respectively.
+With \fBauto\fP, the output is coloured if the output is to a terminal. Force or
+suppress output of ANSI colour escapes with \fBalways\fP (or no specifier
+provided) and \fBnever\fP respectively. If no colour option is provided, the
+default is \fBauto\fP, unless the NO_COLOR environment variable is defined and
+non-empty.
 .TP 10
 \fB-d\fP
 Behave as if each pattern has the \fBdebug\fP modifier; the internal
@@ -809,7 +811,7 @@ when it can never be used.
 The \fBframesize\fP modifier shows the size, in bytes, of each storage frame
 used by \fBpcre2_match()\fP for handling backtracking. The size depends on the
 number of capturing parentheses in the pattern. A vector of these frames is
-used at matching time; its overall size is shown when the \fBheaframes_size\fP
+used at matching time; its overall size is shown when the \fBheapframes_size\fP
 subject modifier is set.
 .P
 The \fBcallout_info\fP modifier requests information about all the callouts in
@@ -2275,6 +2277,6 @@ Cambridge, England.
 .rs
 .sp
 .nf
-Last updated: 12 October 2025
+Last updated: 22 August 2026
 Copyright (c) 1997-2024 University of Cambridge.
 .fi
index b868b91baf7da1aaa7e0ae91a3bbf7ca9c0d63ee..5dc42f12f3c7e792cbd79e2d1c88a607170d1bd9 100644 (file)
@@ -173,9 +173,11 @@ COMMAND LINE OPTIONS
                  the exit code is 0.
 
        --colo[u]r[=<always,auto,never>]
-                 By default, the output is coloured if the output  file  is  a
-                 terminal (auto).  Force or suppress output of ANSI colour es-
-                 capes with always and never respectively.
+                 With auto, the output is coloured if the output is to a  ter-
+                 minal.  Force  or suppress output of ANSI colour escapes with
+                 always (or no specifier provided) and never respectively.  If
+                 no colour option is provided, the default is auto, unless the
+                 NO_COLOR environment variable is defined and non-empty.
 
        -d        Behave  as if each pattern has the debug modifier; the inter-
                  nal form and information about the compiled pattern is output
@@ -785,7 +787,7 @@ PATTERN MODIFIERS
        used by pcre2_match() for handling backtracking. The  size  depends  on
        the  number  of capturing parentheses in the pattern. A vector of these
        frames is used at matching time; its overall size  is  shown  when  the
-       heaframes_size subject modifier is set.
+       heapframes_size subject modifier is set.
 
        The  callout_info  modifier requests information about all the callouts
        in the pattern. A list of them is output at the end of any other infor-
@@ -2098,8 +2100,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 12 October 2025
+       Last updated: 22 August 2026
        Copyright (c) 1997-2024 University of Cambridge.
 
 
-PCRE2 10.47                     12 October 2025                   PCRE2TEST(1)
+PCRE2 10.48-RC1                 22 August 2026                    PCRE2TEST(1)
index cb9f5196b5b26e2d8bf249e2288f50be4778761c..e6cda0a962bfe88dd3ac8eb68db5181b1bc7d04a 100644 (file)
@@ -1,4 +1,4 @@
-.TH PCRE2UNICODE 3 "27 November 2024" "PCRE2 10.47"
+.TH PCRE2UNICODE 3 "27 November 2024" "PCRE2 10.48-RC1"
 .SH NAME
 PCRE2 - Perl-compatible regular expressions (revised API)
 .SH "UNICODE AND UTF SUPPORT"
diff --git a/m4/ax_check_vscript.m4 b/m4/ax_check_vscript.m4
deleted file mode 100644 (file)
index ed834ef..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-# ===========================================================================
-#     https://www.gnu.org/software/autoconf-archive/ax_check_vscript.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_CHECK_VSCRIPT
-#
-# DESCRIPTION
-#
-#   Check whether the linker supports version scripts.  Version scripts are
-#   used when building shared libraries to bind symbols to version nodes
-#   (helping to detect incompatibilities) or to limit the visibility of
-#   non-public symbols.
-#
-#   Output:
-#
-#   If version scripts are supported, VSCRIPT_LDFLAGS will contain the
-#   appropriate flag to pass to the linker.  On GNU systems this would
-#   typically be "-Wl,--version-script", and on Solaris it would typically
-#   be "-Wl,-M".
-#
-#   Two Automake conditionals are also set:
-#
-#    HAVE_VSCRIPT is true if the linker supports version scripts with
-#    entries that use simple wildcards, like "local: *".
-#
-#    HAVE_VSCRIPT_COMPLEX is true if the linker supports version scripts with
-#    pattern matching wildcards, like "global: Java_*".
-#
-#   On systems that do not support symbol versioning, such as Mac OS X, both
-#   conditionals will be false.  They will also be false if the user passes
-#   "--disable-symvers" on the configure command line.
-#
-#   Example:
-#
-#    configure.ac:
-#
-#     AX_CHECK_VSCRIPT
-#
-#    Makefile.am:
-#
-#     if HAVE_VSCRIPT
-#     libfoo_la_LDFLAGS += $(VSCRIPT_LDFLAGS),@srcdir@/libfoo.map
-#     endif
-#
-#     if HAVE_VSCRIPT_COMPLEX
-#     libbar_la_LDFLAGS += $(VSCRIPT_LDFLAGS),@srcdir@/libbar.map
-#     endif
-#
-# LICENSE
-#
-#   Copyright (c) 2014 Kevin Cernekee <cernekee@gmail.com>
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved. This file is offered as-is, without any
-#   warranty.
-
-#serial 2.99 PCRE2
-
-# _AX_CHECK_VSCRIPT(flag, global-sym, action-if-link-succeeds, [junk-file=no])
-AC_DEFUN([_AX_CHECK_VSCRIPT], [
-  AC_LANG_PUSH([C])
-  ax_check_vscript_save_flags="$LDFLAGS"
-  echo "V1 { global: $2; local: *; };" > conftest.map
-  AS_IF([test x$4 = xyes], [
-    echo "{" >> conftest.map
-  ])
-  LDFLAGS="$LDFLAGS -Wl,$1,conftest.map"
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([[int show, hide;]], [])], [$3])
-  LDFLAGS="$ax_check_vscript_save_flags"
-  rm -f conftest.map
-  AC_LANG_POP([C])
-]) dnl _AX_CHECK_VSCRIPT
-
-AC_DEFUN([AX_CHECK_VSCRIPT], [
-
-  AC_ARG_ENABLE([symvers],
-    AS_HELP_STRING([--disable-symvers],
-                   [disable library symbol versioning [default=auto]]),
-    [want_symvers=$enableval],
-    [want_symvers=yes]
-  )
-
-  AS_IF([test x$want_symvers = xyes], [
-
-    dnl First test --version-script and -M with a simple wildcard.
-
-    AC_CACHE_CHECK([linker version script flag], ax_cv_check_vscript_flag, [
-      ax_cv_check_vscript_flag=unsupported
-      _AX_CHECK_VSCRIPT([--version-script], [show], [
-        ax_cv_check_vscript_flag=--version-script
-      ])
-      AS_IF([test x$ax_cv_check_vscript_flag = xunsupported], [
-        # PCRE2: Support for FreeBSD. Rather annoyingly, AC_LINK_IFELSE will
-        # only test linking executables, and in turn, on FreeBSD the main
-        # entrypoint will fail to link if you use "local: *" to hide the
-        # visibility of various shared symbols injected from /usr/lib/crt1.o.
-        # It's not at all pretty to hardcode those symbol names here, but I
-        # can't think of an obvious way to improve on this.
-        _AX_CHECK_VSCRIPT([--version-script], [show;environ;__progname], [
-          ax_cv_check_vscript_flag=--version-script
-        ])
-      ])
-      AS_IF([test x$ax_cv_check_vscript_flag = xunsupported], [
-        _AX_CHECK_VSCRIPT([-M], [show], [ax_cv_check_vscript_flag=-M])
-      ])
-
-      dnl The linker may interpret -M (no argument) as "produce a load map."
-      dnl If "-M conftest.map" doesn't fail when conftest.map contains
-      dnl obvious syntax errors, assume this is the case.
-
-      AS_IF([test x$ax_cv_check_vscript_flag != xunsupported], [
-        _AX_CHECK_VSCRIPT([$ax_cv_check_vscript_flag], [show],
-                         [ax_cv_check_vscript_flag=unsupported], [yes])
-      ])
-    ])
-
-    dnl If the simple wildcard worked, retest with a complex wildcard.
-
-    AS_IF([test x$ax_cv_check_vscript_flag != xunsupported], [
-      ax_check_vscript_flag=$ax_cv_check_vscript_flag
-      AC_CACHE_CHECK([if version scripts can use complex wildcards],
-                     ax_cv_check_vscript_complex_wildcards, [
-        ax_cv_check_vscript_complex_wildcards=no
-        _AX_CHECK_VSCRIPT([$ax_cv_check_vscript_flag], [sh*], [
-        ax_cv_check_vscript_complex_wildcards=yes])
-      ])
-      ax_check_vscript_complex_wildcards="$ax_cv_check_vscript_complex_wildcards"
-    ], [
-      ax_check_vscript_flag=
-      ax_check_vscript_complex_wildcards=no
-    ])
-  ], [
-    AC_MSG_CHECKING([linker version script flag])
-    AC_MSG_RESULT([disabled])
-
-    ax_check_vscript_flag=
-    ax_check_vscript_complex_wildcards=no
-  ])
-
-  AS_IF([test x$ax_check_vscript_flag != x], [
-    VSCRIPT_LDFLAGS="-Wl,$ax_check_vscript_flag"
-    AC_SUBST([VSCRIPT_LDFLAGS])
-  ])
-
-  AM_CONDITIONAL([HAVE_VSCRIPT],
-    [test x$ax_check_vscript_flag != x])
-  AM_CONDITIONAL([HAVE_VSCRIPT_COMPLEX],
-    [test x$ax_check_vscript_complex_wildcards = xyes])
-
-]) dnl AX_CHECK_VSCRIPT
diff --git a/m4/pcre2_check_vscript.m4 b/m4/pcre2_check_vscript.m4
new file mode 100644 (file)
index 0000000..cfe67e4
--- /dev/null
@@ -0,0 +1,118 @@
+# ===========================================================================
+#     https://www.gnu.org/software/autoconf-archive/ax_check_vscript.html
+# ===========================================================================
+#
+# Our pcre2_check_vscript.m4 is derived from the upstream ax_check_vscript.m4,
+# with several modifications.
+#
+# The original upstream file requires the following notice:
+#
+# LICENSE
+#
+#   Copyright (c) 2014 Kevin Cernekee <cernekee@gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 2.99 PCRE2
+
+# _PCRE2_CHECK_VSCRIPT_SHLIB(flag, map-contents, action-if-link-succeeds)
+# Build a shared library with the given linker flag and map file contents.
+# This properly tests version script support by building a shared library
+# rather than an executable, avoiding issues with executable-specific symbols
+# (e.g. FreeBSD's crt1.o symbols, Solaris linker symbols in values-Xc.o).
+# Uses libtool for portability across different platforms.
+AC_DEFUN([_PCRE2_CHECK_VSCRIPT_SHLIB], [
+  rm -rf conftest.vscript
+  mkdir conftest.vscript
+  cat > conftest.vscript/conftest.c <<_ACEOF
+int hidethis(void) { return 0; }
+int exposethis(void) { return hidethis(); }
+_ACEOF
+  echo "$2" > conftest.vscript/conftest.map
+  _pcre2_abs_top_builddir="$ac_pwd"
+  _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool"
+  _pcre2_vscript_cc="$CC"
+  _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS"
+  _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS"
+  _pcre2_vscript_script_flag="$1"
+  export _pcre2_vscript_libtool
+  export _pcre2_vscript_cc
+  export _pcre2_vscript_compile_flags
+  export _pcre2_vscript_ld_flags
+  export _pcre2_vscript_script_flag
+  AS_IF([(cd conftest.vscript && \
+    $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \
+    $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&AS_MESSAGE_LOG_FD 2>&1], [$3])
+  unset _pcre2_vscript_libtool
+  unset _pcre2_vscript_cc
+  unset _pcre2_vscript_compile_flags
+  unset _pcre2_vscript_ld_flags
+  unset _pcre2_vscript_script_flag
+  rm -rf conftest.vscript
+]) dnl _PCRE2_CHECK_VSCRIPT_SHLIB
+
+AC_DEFUN([PCRE2_CHECK_VSCRIPT], [
+
+  AC_ARG_ENABLE([symvers],
+    AS_HELP_STRING([--disable-symvers],
+                   [disable library symbol versioning [default=auto]]),
+    [want_symvers=$enableval],
+    [want_symvers=yes]
+  )
+
+  AS_IF([test x$want_symvers = xyes], [
+
+    dnl First, test --version-script and -M with a simple wildcard.
+    AC_CACHE_CHECK([linker version script flag], pcre2_cv_check_vscript_flag, [
+      pcre2_cv_check_vscript_flag=unsupported
+
+      _PCRE2_CHECK_VSCRIPT_SHLIB([--version-script],
+        [PCRE2_10.00 { global: exposethis; local: *; };],
+        [pcre2_cv_check_vscript_flag=--version-script])
+      AS_IF([test x$pcre2_cv_check_vscript_flag = xunsupported], [
+        _PCRE2_CHECK_VSCRIPT_SHLIB([-M],
+          [PCRE2_10.00 { global: exposethis; local: *; };],
+          [pcre2_cv_check_vscript_flag=-M])
+      ])
+
+      dnl The linker may interpret -M (no argument) as "produce a load map."
+      dnl If "-M conftest.map" doesn't fail when conftest.map contains
+      dnl obvious syntax errors, assume this is the case.
+
+      AS_IF([test x$pcre2_cv_check_vscript_flag != xunsupported], [
+        _PCRE2_CHECK_VSCRIPT_SHLIB([$pcre2_cv_check_vscript_flag],
+          [PCRE2_10.00 { global: exposethis; local: *; };  {],
+          [pcre2_cv_check_vscript_flag=unsupported])
+      ])
+    ])
+
+    AS_IF([test x$pcre2_cv_check_vscript_flag != xunsupported], [
+
+      dnl Test without wildcard - for detecting Solaris, which requires the
+      dnl wildcard (or else a much more complex and brittle configuration).
+      AC_CACHE_CHECK([if version scripts work without wildcard],
+                     pcre2_cv_check_vscript_no_star, [
+        pcre2_cv_check_vscript_no_star=no
+        _PCRE2_CHECK_VSCRIPT_SHLIB([$pcre2_cv_check_vscript_flag],
+          [PCRE2_10.00 { global: exposethis; local: hidethis; };],
+          [pcre2_cv_check_vscript_no_star=yes])
+      ])
+
+      pcre2_check_vscript_flag=$pcre2_cv_check_vscript_flag
+      pcre2_check_vscript_no_star=$pcre2_cv_check_vscript_no_star
+    ], [
+      pcre2_check_vscript_flag=
+      pcre2_check_vscript_no_star=no
+    ])
+  ], [
+    AC_MSG_CHECKING([linker version script flag])
+    AC_MSG_RESULT([disabled])
+
+    pcre2_check_vscript_flag=
+    pcre2_check_vscript_no_star=no
+  ])
+
+]) dnl PCRE2_CHECK_VSCRIPT
diff --git a/patches/pcre2-10.37-Remove-real-POSIX.patch b/patches/pcre2-10.37-Remove-real-POSIX.patch
new file mode 100644 (file)
index 0000000..22b50c0
--- /dev/null
@@ -0,0 +1,40 @@
+commit 080d7789eba00b570181dfe28809b01aa88c01f8
+Author: Philip.Hazel <Philip.Hazel@gmail.com>
+Date:   Tue Apr 27 08:36:47 2021 +0000
+
+    Remove real POSIX function names from the pcre2-posix library.
+
+diff --git a/src/pcre2posix.c b/src/pcre2posix.c
+index b24620a4..32c80c3f 100644
+--- a/src/pcre2posix.c
++++ b/src/pcre2posix.c
+@@ -175,6 +175,20 @@ static const char *const pstring[] = {
++#if 0  /* REMOVE THIS CODE */
++
++The code below was created for 10.33 (see ChangeLog 10.33 #4) when the
++POSIX functions were given pcre2_... names instead of the traditional POSIX 
++names. However, it has proved to be more troublesome than useful. There have
++been at least two cases where a program links with two others, one of which
++uses the POSIX library and the other uses the PCRE2 POSIX functions, thus
++causing two instances of the POSIX runctions to exist, leading to trouble. For
++10.37 this code is commented out. In due course it can be removed if there are
++no issues. The only small worry is the comment below about languages that do 
++not include pcre2posix.h. If there are any such cases, they will have to use
++the PCRE2 names.
++
++
+ /*************************************************
+ *      Wrappers with traditional POSIX names     *
+ *************************************************/
+@@ -218,7 +232,7 @@ regexec(const regex_t *preg, const char *string, size_t nmatch,
+ {
+ return pcre2_regexec(preg, string, nmatch, pmatch, eflags);
+ }
+-
++#endif
+ /*************************************************
diff --git a/patches/pcre2-10.39-Fix-incorrect-detection.patch b/patches/pcre2-10.39-Fix-incorrect-detection.patch
new file mode 100644 (file)
index 0000000..6048a79
--- /dev/null
@@ -0,0 +1,73 @@
+commit 51ec2c9893e7dac762b70033b85f55801b01176c
+Author: Zoltan Herczeg <hzmester@freemail.hu>
+Date:   Tue Oct 5 16:40:57 2021 +0000
+
+    Fix incorrect detection of alternatives in first character search.
+
+diff --git a/ChangeLog b/ChangeLog
+index e0ac9b3b..05b317c2 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,6 +1,12 @@
+ Change Log for PCRE2
+ --------------------
++Version 10.39-RC1 xx-xxx-2021
++-----------------------------
++
++1. Fix incorrect detection of alternatives in first character search.
++
++
+ Version 10.38 01-October-2021
+ -----------------------------
+diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c
+index 495920de..2c614065 100644
+--- a/src/pcre2_jit_compile.c
++++ b/src/pcre2_jit_compile.c
+@@ -1251,10 +1251,13 @@ SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA);
+ SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0);
+ SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX);
++next_alt = cc + GET(cc, 1);
++if (*next_alt == OP_ALT)
++  fast_forward_allowed = FALSE;
++
+ do
+   {
+   count = start;
+-  next_alt = cc + GET(cc, 1);
+   cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0);
+   while (TRUE)
+@@ -1512,7 +1515,7 @@ do
+         {
+         count++;
+-        if (fast_forward_allowed && *next_alt == OP_KET)
++        if (fast_forward_allowed)
+           {
+           common->fast_forward_bc_ptr = accelerated_start;
+           common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip;
+@@ -1562,8 +1565,8 @@ do
+   else if (result < count)
+     result = count;
+-  fast_forward_allowed = FALSE;
+   cc = next_alt;
++  next_alt = cc + GET(cc, 1);
+   }
+ while (*cc == OP_ALT);
+diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c
+index f7480165..8dee16e5 100644
+--- a/src/pcre2_jit_test.c
++++ b/src/pcre2_jit_test.c
+@@ -352,6 +352,7 @@ static struct regression_test_case regression_test_cases[] = {
+       { MU, A, 0, 0, ".[ab]?.", "xx" },
+       { MU, A, 0, 0, "_[ab]+_*a", "_aa" },
+       { MU, A, 0, 0, "#(A+)#\\d+", "#A#A#0" },
++      { MU, A, 0, 0, "(?P<size>\\d+)m|M", "4M" },
+       /* Bracket repeats with limit. */
+       { MU, A, 0, 0, "(?:(ab){2}){5}M", "abababababababababababM" },
diff --git a/patches/pcre2-10.40-A-Fixed-a-unicode.patch b/patches/pcre2-10.40-A-Fixed-a-unicode.patch
new file mode 100644 (file)
index 0000000..2d89da9
--- /dev/null
@@ -0,0 +1,50 @@
+commit d4fa336fbcc388f89095b184ba6d99422cfc676c
+Author: Zoltan Herczeg <hzmester@freemail.hu>
+Date:   Thu Mar 24 05:34:42 2022 +0000
+
+    Fix incorrect value reading in JIT.
+
+commit 50a51cb7e67268e6ad417eb07c9de9bfea5cc55a
+Author: Zoltan Herczeg <hzmester@freemail.hu>
+Date:   Wed Mar 23 07:53:25 2022 +0000
+
+    Fixed a unicode properrty matching issue in JIT
+diff --git a/ChangeLog b/ChangeLog
+index f0eab7ba..ffb08805 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -92,6 +92,9 @@ pattern, the optimizing "must be present for a match" character check was not
+ being flagged as caseless, causing some matches that should have succeeded to
+ fail.
++23. Fixed a unicode properrty matching issue in JIT. The character was not
++fully read in caseless matching.
++
+ Version 10.39 29-October-2021
+ -----------------------------
+diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c
+index e7dd26c5..7fcdac86 100644
+--- a/src/pcre2_jit_compile.c
++++ b/src/pcre2_jit_compile.c
+@@ -7489,7 +7489,7 @@ while (*cc != XCL_END)
+     {
+     SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP);
+     cc++;
+-    if (*cc == PT_CLIST)
++    if (*cc == PT_CLIST && cc[-1] == XCL_PROP)
+       {
+       other_cases = PRIV(ucd_caseless_sets) + cc[1];
+       while (*other_cases != NOTACHAR)
+diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c
+index 3b57ce29..8450f0b6 100644
+--- a/src/pcre2_jit_test.c
++++ b/src/pcre2_jit_test.c
+@@ -415,6 +415,7 @@ static struct regression_test_case regression_test_cases[] = {
+       { MUP, 0, 0, 0 | F_NOMATCH, "[^\\p{Hangul}\\p{Z}]", " " },
+       { MUP, 0, 0, 0, "[\\p{Lu}\\P{Latin}]+", "c\xEA\xA4\xAE,A,b" },
+       { MUP, 0, 0, 0, "[\\x{a92e}\\p{Lu}\\P{Latin}]+", "c\xEA\xA4\xAE,A,b" },
++      { CMUP, 0, 0, 0, "[^S]\\B", "\xe2\x80\x8a" },
+       /* Possible empty brackets. */
+       { MU, A, 0, 0, "(?:|ab||bc|a)+d", "abcxabcabd" },
diff --git a/patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch b/patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch
new file mode 100644 (file)
index 0000000..c6bf2fd
--- /dev/null
@@ -0,0 +1,648 @@
+commit 03654e751e7f0700693526b67dfcadda6b42c9d0
+Author: Zoltan Herczeg <hzmester@freemail.hu>
+Date:   Sat Mar 26 07:55:50 2022 +0000
+
+    Fixed an issue affecting recursions in JIT
+
+diff --git a/ChangeLog b/ChangeLog
+index ffb08805..a8000774 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -95,6 +95,9 @@ fail.
+ 23. Fixed a unicode properrty matching issue in JIT. The character was not
+ fully read in caseless matching.
++24. Fixed an issue affecting recursions in JIT caused by duplicated data
++transfers.
++
+ Version 10.39 29-October-2021
+ -----------------------------
+diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c
+index 7fcdac86..bf71d158 100644
+--- a/src/pcre2_jit_compile.c
++++ b/src/pcre2_jit_compile.c
+@@ -413,6 +413,9 @@ typedef struct compiler_common {
+   /* Locals used by fast fail optimization. */
+   sljit_s32 early_fail_start_ptr;
+   sljit_s32 early_fail_end_ptr;
++  /* Variables used by recursive call generator. */
++  sljit_s32 recurse_bitset_size;
++  uint8_t *recurse_bitset;
+   /* Flipped and lower case tables. */
+   const sljit_u8 *fcc;
+@@ -2317,19 +2320,39 @@ for (i = 0; i < RECURSE_TMP_REG_COUNT; i++)
+ #undef RECURSE_TMP_REG_COUNT
++static BOOL recurse_check_bit(compiler_common *common, sljit_sw bit_index)
++{
++uint8_t *byte;
++uint8_t mask;
++
++SLJIT_ASSERT((bit_index & (sizeof(sljit_sw) - 1)) == 0);
++
++bit_index >>= SLJIT_WORD_SHIFT;
++
++mask = 1 << (bit_index & 0x7);
++byte = common->recurse_bitset + (bit_index >> 3);
++
++if (*byte & mask)
++  return FALSE;
++
++*byte |= mask;
++return TRUE;
++}
++
+ static int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend,
+   BOOL *needs_control_head, BOOL *has_quit, BOOL *has_accept)
+ {
+ int length = 1;
+-int size;
++int size, offset;
+ PCRE2_SPTR alternative;
+ BOOL quit_found = FALSE;
+ BOOL accept_found = FALSE;
+ BOOL setsom_found = FALSE;
+ BOOL setmark_found = FALSE;
+-BOOL capture_last_found = FALSE;
+ BOOL control_head_found = FALSE;
++memset(common->recurse_bitset, 0, common->recurse_bitset_size);
++
+ #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD
+ SLJIT_ASSERT(common->control_head_ptr != 0);
+ control_head_found = TRUE;
+@@ -2352,15 +2375,17 @@ while (cc < ccend)
+       setsom_found = TRUE;
+     if (common->mark_ptr != 0)
+       setmark_found = TRUE;
+-    if (common->capture_last_ptr != 0)
+-      capture_last_found = TRUE;
++    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))
++      length++;
+     cc += 1 + LINK_SIZE;
+     break;
+     case OP_KET:
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0)
+       {
+-      length++;
++      if (recurse_check_bit(common, offset))
++        length++;
+       SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0);
+       cc += PRIVATE_DATA(cc + 1);
+       }
+@@ -2379,39 +2404,55 @@ while (cc < ccend)
+     case OP_SBRA:
+     case OP_SBRAPOS:
+     case OP_SCOND:
+-    length++;
+     SLJIT_ASSERT(PRIVATE_DATA(cc) != 0);
++    if (recurse_check_bit(common, PRIVATE_DATA(cc)))
++      length++;
+     cc += 1 + LINK_SIZE;
+     break;
+     case OP_CBRA:
+     case OP_SCBRA:
+-    length += 2;
+-    if (common->capture_last_ptr != 0)
+-      capture_last_found = TRUE;
+-    if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)
++    offset = GET2(cc, 1 + LINK_SIZE);
++    if (recurse_check_bit(common, OVECTOR(offset << 1)))
++      {
++      SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1)));
++      length += 2;
++      }
++    if (common->optimized_cbracket[offset] == 0 && recurse_check_bit(common, OVECTOR_PRIV(offset)))
++      length++;
++    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))
+       length++;
+     cc += 1 + LINK_SIZE + IMM2_SIZE;
+     break;
+     case OP_CBRAPOS:
+     case OP_SCBRAPOS:
+-    length += 2 + 2;
+-    if (common->capture_last_ptr != 0)
+-      capture_last_found = TRUE;
++    offset = GET2(cc, 1 + LINK_SIZE);
++    if (recurse_check_bit(common, OVECTOR(offset << 1)))
++      {
++      SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1)));
++      length += 2;
++      }
++    if (recurse_check_bit(common, OVECTOR_PRIV(offset)))
++      length++;
++    if (recurse_check_bit(common, PRIVATE_DATA(cc)))
++      length++;
++    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))
++      length++;
+     cc += 1 + LINK_SIZE + IMM2_SIZE;
+     break;
+     case OP_COND:
+     /* Might be a hidden SCOND. */
+     alternative = cc + GET(cc, 1);
+-    if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)
++    if ((*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) && recurse_check_bit(common, PRIVATE_DATA(cc)))
+       length++;
+     cc += 1 + LINK_SIZE;
+     break;
+     CASE_ITERATOR_PRIVATE_DATA_1
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
+       length++;
+     cc += 2;
+ #ifdef SUPPORT_UNICODE
+@@ -2420,8 +2461,12 @@ while (cc < ccend)
+     break;
+     CASE_ITERATOR_PRIVATE_DATA_2A
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
++      {
++      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));
+       length += 2;
++      }
+     cc += 2;
+ #ifdef SUPPORT_UNICODE
+     if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);
+@@ -2429,8 +2474,12 @@ while (cc < ccend)
+     break;
+     CASE_ITERATOR_PRIVATE_DATA_2B
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
++      {
++      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));
+       length += 2;
++      }
+     cc += 2 + IMM2_SIZE;
+ #ifdef SUPPORT_UNICODE
+     if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);
+@@ -2438,20 +2487,29 @@ while (cc < ccend)
+     break;
+     CASE_ITERATOR_TYPE_PRIVATE_DATA_1
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
+       length++;
+     cc += 1;
+     break;
+     CASE_ITERATOR_TYPE_PRIVATE_DATA_2A
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
++      {
++      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));
+       length += 2;
++      }
+     cc += 1;
+     break;
+     CASE_ITERATOR_TYPE_PRIVATE_DATA_2B
+-    if (PRIVATE_DATA(cc) != 0)
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
++      {
++      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));
+       length += 2;
++      }
+     cc += 1 + IMM2_SIZE;
+     break;
+@@ -2463,7 +2521,9 @@ while (cc < ccend)
+ #else
+     size = 1 + 32 / (int)sizeof(PCRE2_UCHAR);
+ #endif
+-    if (PRIVATE_DATA(cc) != 0)
++
++    offset = PRIVATE_DATA(cc);
++    if (offset != 0 && recurse_check_bit(common, offset))
+       length += get_class_iterator_size(cc + size);
+     cc += size;
+     break;
+@@ -2498,8 +2558,7 @@ while (cc < ccend)
+     case OP_THEN:
+     SLJIT_ASSERT(common->control_head_ptr != 0);
+     quit_found = TRUE;
+-    if (!control_head_found)
+-      control_head_found = TRUE;
++    control_head_found = TRUE;
+     cc++;
+     break;
+@@ -2519,8 +2578,6 @@ SLJIT_ASSERT(cc == ccend);
+ if (control_head_found)
+   length++;
+-if (capture_last_found)
+-  length++;
+ if (quit_found)
+   {
+   if (setsom_found)
+@@ -2553,14 +2610,12 @@ sljit_sw shared_srcw[3];
+ sljit_sw kept_shared_srcw[2];
+ int private_count, shared_count, kept_shared_count;
+ int from_sp, base_reg, offset, i;
+-BOOL setsom_found = FALSE;
+-BOOL setmark_found = FALSE;
+-BOOL capture_last_found = FALSE;
+-BOOL control_head_found = FALSE;
++
++memset(common->recurse_bitset, 0, common->recurse_bitset_size);
+ #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD
+ SLJIT_ASSERT(common->control_head_ptr != 0);
+-control_head_found = TRUE;
++recurse_check_bit(common, common->control_head_ptr);
+ #endif
+ switch (type)
+@@ -2648,11 +2703,10 @@ while (cc < ccend)
+     {
+     case OP_SET_SOM:
+     SLJIT_ASSERT(common->has_set_som);
+-    if (has_quit && !setsom_found)
++    if (has_quit && recurse_check_bit(common, OVECTOR(0)))
+       {
+       kept_shared_srcw[0] = OVECTOR(0);
+       kept_shared_count = 1;
+-      setsom_found = TRUE;
+       }
+     cc += 1;
+     break;
+@@ -2660,33 +2714,31 @@ while (cc < ccend)
+     case OP_RECURSE:
+     if (has_quit)
+       {
+-      if (common->has_set_som && !setsom_found)
++      if (common->has_set_som && recurse_check_bit(common, OVECTOR(0)))
+         {
+         kept_shared_srcw[0] = OVECTOR(0);
+         kept_shared_count = 1;
+-        setsom_found = TRUE;
+         }
+-      if (common->mark_ptr != 0 && !setmark_found)
++      if (common->mark_ptr != 0 && recurse_check_bit(common, common->mark_ptr))
+         {
+         kept_shared_srcw[kept_shared_count] = common->mark_ptr;
+         kept_shared_count++;
+-        setmark_found = TRUE;
+         }
+       }
+-    if (common->capture_last_ptr != 0 && !capture_last_found)
++    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))
+       {
+       shared_srcw[0] = common->capture_last_ptr;
+       shared_count = 1;
+-      capture_last_found = TRUE;
+       }
+     cc += 1 + LINK_SIZE;
+     break;
+     case OP_KET:
+-    if (PRIVATE_DATA(cc) != 0)
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0)
+       {
+-      private_count = 1;
+-      private_srcw[0] = PRIVATE_DATA(cc);
++      if (recurse_check_bit(common, private_srcw[0]))
++        private_count = 1;
+       SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0);
+       cc += PRIVATE_DATA(cc + 1);
+       }
+@@ -2705,50 +2757,66 @@ while (cc < ccend)
+     case OP_SBRA:
+     case OP_SBRAPOS:
+     case OP_SCOND:
+-    private_count = 1;
+     private_srcw[0] = PRIVATE_DATA(cc);
++    if (recurse_check_bit(common, private_srcw[0]))
++      private_count = 1;
+     cc += 1 + LINK_SIZE;
+     break;
+     case OP_CBRA:
+     case OP_SCBRA:
+-    offset = (GET2(cc, 1 + LINK_SIZE)) << 1;
+-    shared_srcw[0] = OVECTOR(offset);
+-    shared_srcw[1] = OVECTOR(offset + 1);
+-    shared_count = 2;
++    offset = GET2(cc, 1 + LINK_SIZE);
++    shared_srcw[0] = OVECTOR(offset << 1);
++    if (recurse_check_bit(common, shared_srcw[0]))
++      {
++      shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw);
++      SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1]));
++      shared_count = 2;
++      }
+-    if (common->capture_last_ptr != 0 && !capture_last_found)
++    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))
+       {
+-      shared_srcw[2] = common->capture_last_ptr;
+-      shared_count = 3;
+-      capture_last_found = TRUE;
++      shared_srcw[shared_count] = common->capture_last_ptr;
++      shared_count++;
+       }
+-    if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)
++    if (common->optimized_cbracket[offset] == 0)
+       {
+-      private_count = 1;
+-      private_srcw[0] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE));
++      private_srcw[0] = OVECTOR_PRIV(offset);
++      if (recurse_check_bit(common, private_srcw[0]))
++        private_count = 1;
+       }
++
+     cc += 1 + LINK_SIZE + IMM2_SIZE;
+     break;
+     case OP_CBRAPOS:
+     case OP_SCBRAPOS:
+-    offset = (GET2(cc, 1 + LINK_SIZE)) << 1;
+-    shared_srcw[0] = OVECTOR(offset);
+-    shared_srcw[1] = OVECTOR(offset + 1);
+-    shared_count = 2;
++    offset = GET2(cc, 1 + LINK_SIZE);
++    shared_srcw[0] = OVECTOR(offset << 1);
++    if (recurse_check_bit(common, shared_srcw[0]))
++      {
++      shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw);
++      SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1]));
++      shared_count = 2;
++      }
+-    if (common->capture_last_ptr != 0 && !capture_last_found)
++    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))
+       {
+-      shared_srcw[2] = common->capture_last_ptr;
+-      shared_count = 3;
+-      capture_last_found = TRUE;
++      shared_srcw[shared_count] = common->capture_last_ptr;
++      shared_count++;
+       }
+-    private_count = 2;
+     private_srcw[0] = PRIVATE_DATA(cc);
+-    private_srcw[1] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE));
++    if (recurse_check_bit(common, private_srcw[0]))
++      private_count = 1;
++
++    offset = OVECTOR_PRIV(offset);
++    if (recurse_check_bit(common, offset))
++      {
++      private_srcw[private_count] = offset;
++      private_count++;
++      }
+     cc += 1 + LINK_SIZE + IMM2_SIZE;
+     break;
+@@ -2757,18 +2825,17 @@ while (cc < ccend)
+     alternative = cc + GET(cc, 1);
+     if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)
+       {
+-      private_count = 1;
+       private_srcw[0] = PRIVATE_DATA(cc);
++      if (recurse_check_bit(common, private_srcw[0]))
++        private_count = 1;
+       }
+     cc += 1 + LINK_SIZE;
+     break;
+     CASE_ITERATOR_PRIVATE_DATA_1
+-    if (PRIVATE_DATA(cc))
+-      {
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))
+       private_count = 1;
+-      private_srcw[0] = PRIVATE_DATA(cc);
+-      }
+     cc += 2;
+ #ifdef SUPPORT_UNICODE
+     if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);
+@@ -2776,11 +2843,12 @@ while (cc < ccend)
+     break;
+     CASE_ITERATOR_PRIVATE_DATA_2A
+-    if (PRIVATE_DATA(cc))
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))
+       {
+       private_count = 2;
+-      private_srcw[0] = PRIVATE_DATA(cc);
+-      private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw);
++      private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);
++      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));
+       }
+     cc += 2;
+ #ifdef SUPPORT_UNICODE
+@@ -2789,11 +2857,12 @@ while (cc < ccend)
+     break;
+     CASE_ITERATOR_PRIVATE_DATA_2B
+-    if (PRIVATE_DATA(cc))
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))
+       {
+       private_count = 2;
+-      private_srcw[0] = PRIVATE_DATA(cc);
+-      private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw);
++      private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);
++      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));
+       }
+     cc += 2 + IMM2_SIZE;
+ #ifdef SUPPORT_UNICODE
+@@ -2802,30 +2871,30 @@ while (cc < ccend)
+     break;
+     CASE_ITERATOR_TYPE_PRIVATE_DATA_1
+-    if (PRIVATE_DATA(cc))
+-      {
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))
+       private_count = 1;
+-      private_srcw[0] = PRIVATE_DATA(cc);
+-      }
+     cc += 1;
+     break;
+     CASE_ITERATOR_TYPE_PRIVATE_DATA_2A
+-    if (PRIVATE_DATA(cc))
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))
+       {
+       private_count = 2;
+-      private_srcw[0] = PRIVATE_DATA(cc);
+       private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);
++      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));
+       }
+     cc += 1;
+     break;
+     CASE_ITERATOR_TYPE_PRIVATE_DATA_2B
+-    if (PRIVATE_DATA(cc))
++    private_srcw[0] = PRIVATE_DATA(cc);
++    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))
+       {
+       private_count = 2;
+-      private_srcw[0] = PRIVATE_DATA(cc);
+       private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);
++      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));
+       }
+     cc += 1 + IMM2_SIZE;
+     break;
+@@ -2842,14 +2911,17 @@ while (cc < ccend)
+       switch(get_class_iterator_size(cc + i))
+         {
+         case 1:
+-        private_count = 1;
+         private_srcw[0] = PRIVATE_DATA(cc);
+         break;
+         case 2:
+-        private_count = 2;
+         private_srcw[0] = PRIVATE_DATA(cc);
+-        private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);
++        if (recurse_check_bit(common, private_srcw[0]))
++          {
++          private_count = 2;
++          private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);
++          SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));
++          }
+         break;
+         default:
+@@ -2864,28 +2936,25 @@ while (cc < ccend)
+     case OP_PRUNE_ARG:
+     case OP_THEN_ARG:
+     SLJIT_ASSERT(common->mark_ptr != 0);
+-    if (has_quit && !setmark_found)
++    if (has_quit && recurse_check_bit(common, common->mark_ptr))
+       {
+       kept_shared_srcw[0] = common->mark_ptr;
+       kept_shared_count = 1;
+-      setmark_found = TRUE;
+       }
+-    if (common->control_head_ptr != 0 && !control_head_found)
++    if (common->control_head_ptr != 0 && recurse_check_bit(common, common->control_head_ptr))
+       {
+       private_srcw[0] = common->control_head_ptr;
+       private_count = 1;
+-      control_head_found = TRUE;
+       }
+     cc += 1 + 2 + cc[1];
+     break;
+     case OP_THEN:
+     SLJIT_ASSERT(common->control_head_ptr != 0);
+-    if (!control_head_found)
++    if (recurse_check_bit(common, common->control_head_ptr))
+       {
+       private_srcw[0] = common->control_head_ptr;
+       private_count = 1;
+-      control_head_found = TRUE;
+       }
+     cc++;
+     break;
+@@ -2893,7 +2962,7 @@ while (cc < ccend)
+     default:
+     cc = next_opcode(common, cc);
+     SLJIT_ASSERT(cc != NULL);
+-    break;
++    continue;
+     }
+   if (type != recurse_copy_shared_to_global && type != recurse_copy_kept_shared_to_global)
+@@ -13811,7 +13880,7 @@ SLJIT_ASSERT(!(common->req_char_ptr != 0 && common->start_used_ptr != 0));
+ common->cbra_ptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_sw);
+ total_length = ccend - common->start;
+-common->private_data_ptrs = (sljit_s32 *)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data);
++common->private_data_ptrs = (sljit_s32*)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data);
+ if (!common->private_data_ptrs)
+   {
+   SLJIT_FREE(common->optimized_cbracket, allocator_data);
+@@ -13852,6 +13921,7 @@ if (!compiler)
+ common->compiler = compiler;
+ /* Main pcre2_jit_exec entry. */
++SLJIT_ASSERT((private_data_size & (sizeof(sljit_sw) - 1)) == 0);
+ sljit_emit_enter(compiler, 0, SLJIT_ARGS1(W, W), 5, 5, 0, 0, private_data_size);
+ /* Register init. */
+@@ -14074,20 +14144,40 @@ common->early_fail_end_ptr = 0;
+ common->currententry = common->entries;
+ common->local_quit_available = TRUE;
+ quit_label = common->quit_label;
+-while (common->currententry != NULL)
++if (common->currententry != NULL)
+   {
+-  /* Might add new entries. */
+-  compile_recurse(common);
+-  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
++  /* A free bit for each private data. */
++  common->recurse_bitset_size = ((private_data_size / (int)sizeof(sljit_sw)) + 7) >> 3;
++  SLJIT_ASSERT(common->recurse_bitset_size > 0);
++  common->recurse_bitset = (sljit_u8*)SLJIT_MALLOC(common->recurse_bitset_size, allocator_data);;
++
++  if (common->recurse_bitset != NULL)
++    {
++    do
++      {
++      /* Might add new entries. */
++      compile_recurse(common);
++      if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
++        break;
++      flush_stubs(common);
++      common->currententry = common->currententry->next;
++      }
++    while (common->currententry != NULL);
++
++    SLJIT_FREE(common->recurse_bitset, allocator_data);
++    }
++
++  if (common->currententry != NULL)
+     {
++    /* The common->recurse_bitset has been freed. */
++    SLJIT_ASSERT(sljit_get_compiler_error(compiler) || common->recurse_bitset == NULL);
++
+     sljit_free_compiler(compiler);
+     SLJIT_FREE(common->optimized_cbracket, allocator_data);
+     SLJIT_FREE(common->private_data_ptrs, allocator_data);
+     PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data);
+     return PCRE2_ERROR_NOMEMORY;
+     }
+-  flush_stubs(common);
+-  common->currententry = common->currententry->next;
+   }
+ common->local_quit_available = FALSE;
+ common->quit_label = quit_label;
+diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c
+index 8450f0b6..bb141a0c 100644
+--- a/src/pcre2_jit_test.c
++++ b/src/pcre2_jit_test.c
+@@ -751,6 +751,7 @@ static struct regression_test_case regression_test_cases[] = {
+       { MU, A, 0, 0, "((?(R)a|(?1)){1,3}?)M", "aaaM" },
+       { MU, A, 0, 0, "((.)(?:.|\\2(?1))){0}#(?1)#", "#aabbccdde# #aabbccddee#" },
+       { MU, A, 0, 0, "((.)(?:\\2|\\2{4}b)){0}#(?:(?1))+#", "#aaaab# #aaaaab#" },
++      { MU, A, 0, 0 | F_NOMATCH, "(?1)$((.|\\2xx){1,2})", "abc" },
+       /* 16 bit specific tests. */
+       { CM, A, 0, 0 | F_FORCECONV, "\xc3\xa1", "\xc3\x81\xc3\xa1" },
diff --git a/patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch b/patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch
new file mode 100644 (file)
index 0000000..9a9d020
--- /dev/null
@@ -0,0 +1,137 @@
+From bfb55a6bd406ae711444915bba957b933aaa10ca Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
+Date: Tue, 17 Jan 2023 06:55:53 -0800
+Subject: [PATCH 1/2] avoid LIMIT_HEAP integer multiplication wrap around
+ (#184)
+
+Cherry-picked from 4d66adc387baa2d29f91f0cadfaf8d8e77e13bb3.
+
+If a LIMIT_HEAP value once converted to bytes is larger than UINT_MAX
+would result in a bogus setting that could trigger a matching failure
+as shown by the following:
+
+  PCRE2 version 10.42 2022-12-11
+    re> /(*LIMIT_HEAP=4194304)a/
+  data> a
+  Failed: error -63: heap limit exceeded
+
+Remove the multiplication and instead keep track of the maximum heap
+allowed in KB as was done originally.
+
+Aditionally, add a check to avoid overflowing a PCRE2_SIZE while
+doubling the heap used and that could result in a crash (only on
+systems with a 32-bit PCRE2_SIZE and using non standard settings).
+
+Unlike the original, this code avoids rounding the heapframes_size
+to the frame_size at the allocation time, which simplifies the logic
+and wasn't really needed.
+
+Fixes: d90fb23 (Refactor match_data() to always use the heap instead
+       of having an initial frames vector on the stack..., 2022-07-27)
+Closes: #183
+---
+ src/pcre2_intmodedep.h |  4 ++--
+ src/pcre2_match.c      | 38 +++++++++++++++++++++++++++-----------
+ 2 files changed, 29 insertions(+), 13 deletions(-)
+
+diff --git a/src/pcre2_intmodedep.h b/src/pcre2_intmodedep.h
+index 390e737a..8f6487e9 100644
+--- a/src/pcre2_intmodedep.h
++++ b/src/pcre2_intmodedep.h
+@@ -858,7 +858,7 @@ doing traditional NFA matching (pcre2_match() and friends). */
+ typedef struct match_block {
+   pcre2_memctl memctl;            /* For general use */
+-  PCRE2_SIZE heap_limit;          /* As it says */
++  uint32_t heap_limit;            /* As it says */
+   uint32_t match_limit;           /* As it says */
+   uint32_t match_limit_depth;     /* As it says */
+   uint32_t match_call_count;      /* Number of times a new frame is created */
+@@ -911,7 +911,7 @@ typedef struct dfa_match_block {
+   PCRE2_SPTR last_used_ptr;       /* Latest consulted character */
+   const uint8_t *tables;          /* Character tables */
+   PCRE2_SIZE start_offset;        /* The start offset value */
+-  PCRE2_SIZE heap_limit;          /* As it says */
++  uint32_t heap_limit;            /* As it says */
+   PCRE2_SIZE heap_used;           /* As it says */
+   uint32_t match_limit;           /* As it says */
+   uint32_t match_limit_depth;     /* As it says */
+diff --git a/src/pcre2_match.c b/src/pcre2_match.c
+index 168b9fad..fa49e64a 100644
+--- a/src/pcre2_match.c
++++ b/src/pcre2_match.c
+@@ -665,13 +665,28 @@ N = (heapframe *)((char *)F + frame_size);
+ if (N >= frames_top)
+   {
+   heapframe *new;
+-  PCRE2_SIZE newsize = match_data->heapframes_size * 2;
++  PCRE2_SIZE newsize;
+-  if (newsize > mb->heap_limit)
++  if (match_data->heapframes_size >= PCRE2_SIZE_MAX / 2)
+     {
+-    PCRE2_SIZE maxsize = (mb->heap_limit/frame_size) * frame_size;
+-    if (match_data->heapframes_size >= maxsize) return PCRE2_ERROR_HEAPLIMIT;
+-    newsize = maxsize;
++    if (match_data->heapframes_size == PCRE2_SIZE_MAX - 1)
++      return PCRE2_ERROR_NOMEMORY;
++    newsize = PCRE2_SIZE_MAX - 1;
++    }
++  else
++    newsize = match_data->heapframes_size * 2;
++
++  if (newsize / 1024 >= mb->heap_limit)
++    {
++    PCRE2_SIZE old_size = match_data->heapframes_size / 1024;
++    if (mb->heap_limit <= old_size) return PCRE2_ERROR_HEAPLIMIT;
++    else
++      {
++      PCRE2_SIZE max_delta = 1024 * (mb->heap_limit - old_size);
++      int over_bytes = match_data->heapframes_size % 1024;
++      if (over_bytes) max_delta -= (1024 - over_bytes);
++      newsize = match_data->heapframes_size + max_delta;
++      }
+     }
+   new = match_data->memctl.malloc(newsize, match_data->memctl.memory_data);
+@@ -6801,7 +6816,7 @@ the pattern. It is not used at all if there are no capturing parentheses.
+   frame_size                   is the total size of each frame
+   match_data->heapframes       is the pointer to the frames vector
+-  match_data->heapframes_size  is the total size of the vector
++  match_data->heapframes_size  is the allocated size of the vector
+ We must pad the frame_size for alignment to ensure subsequent frames are as
+ aligned as heapframe. Whilst ovector is word-aligned due to being a PCRE2_SIZE
+@@ -6816,7 +6831,7 @@ frame_size = (offsetof(heapframe, ovector) +
+ smaller. */
+ mb->heap_limit = ((mcontext->heap_limit < re->limit_heap)?
+-  mcontext->heap_limit : re->limit_heap) * 1024;
++  mcontext->heap_limit : re->limit_heap);
+ mb->match_limit = (mcontext->match_limit < re->limit_match)?
+   mcontext->match_limit : re->limit_match;
+@@ -6832,14 +6847,15 @@ the size to a multiple of the frame size. */
+ heapframes_size = frame_size * 10;
+ if (heapframes_size < START_FRAMES_SIZE) heapframes_size = START_FRAMES_SIZE;
+-if (heapframes_size > mb->heap_limit)
++if (heapframes_size / 1024 > mb->heap_limit)
+   {
+-  if (frame_size > mb->heap_limit ) return PCRE2_ERROR_HEAPLIMIT;
+-  heapframes_size = mb->heap_limit;
++  PCRE2_SIZE max_size = 1024 * mb->heap_limit;
++  if (max_size < frame_size) return PCRE2_ERROR_HEAPLIMIT;
++  heapframes_size = max_size;
+   }
+ /* If an existing frame vector in the match_data block is large enough, we can
+-use it.Otherwise, free any pre-existing vector and get a new one. */
++use it. Otherwise, free any pre-existing vector and get a new one. */
+ if (match_data->heapframes_size < heapframes_size)
+   {
+-- 
+2.51.2.vfs.0.0
+
diff --git a/patches/pcre2-10.43-Fix-heapframe-overflow.patch b/patches/pcre2-10.43-Fix-heapframe-overflow.patch
new file mode 100644 (file)
index 0000000..e5d5948
--- /dev/null
@@ -0,0 +1,160 @@
+From ba0a3ff395d99ab2fe7ee76f96c97736294298c6 Mon Sep 17 00:00:00 2001
+From: Philip Hazel <Philip.Hazel@gmail.com>
+Date: Fri, 18 Aug 2023 17:40:16 +0100
+Subject: [PATCH 2/2] Fix issue #275
+
+Cherry-picked from 803a64f6151a2d43a44a2377956ae36408c96986.
+---
+ src/pcre2_match.c     | 32 +++++++++++++++-----------------
+ testdata/testinput15  |  7 ++++++-
+ testdata/testoutput15 |  8 +++++++-
+ 3 files changed, 28 insertions(+), 19 deletions(-)
+
+diff --git a/src/pcre2_match.c b/src/pcre2_match.c
+index fa49e64a..8d3c796e 100644
+--- a/src/pcre2_match.c
++++ b/src/pcre2_match.c
+@@ -597,7 +597,6 @@ heapframe *P = NULL;
+ heapframe *frames_top;  /* End of frames vector */
+ heapframe *assert_accept_frame = NULL;  /* For passing back a frame with captures */
+-PCRE2_SIZE heapframes_size;   /* Usable size of frames vector */
+ PCRE2_SIZE frame_copy_size;   /* Amount to copy when creating a new frame */
+ /* Local variables that do not need to be preserved over calls to RRMATCH(). */
+@@ -635,13 +634,10 @@ copied when a new frame is created. */
+ frame_copy_size = frame_size - offsetof(heapframe, eptr);
+-/* Set up the first frame and the end of the frames vector. We set the local
+-heapframes_size to the usuable amount of the vector, that is, a whole number of
+-frames. */
++/* Set up the first frame and the end of the frames vector. */
+ F = match_data->heapframes;
+-heapframes_size = (match_data->heapframes_size / frame_size) * frame_size;
+-frames_top = (heapframe *)((char *)F + heapframes_size);
++frames_top = (heapframe *)((char *)F + match_data->heapframes_size);
+ Frdepth = 0;                        /* "Recursion" depth */
+ Fcapture_last = 0;                  /* Number of most recent capture */
+@@ -662,10 +658,11 @@ MATCH_RECURSE:
+ doubling the size, but constrained by the heap limit (which is in KiB). */
+ N = (heapframe *)((char *)F + frame_size);
+-if (N >= frames_top)
++if ((heapframe *)((char *)N + frame_size) >= frames_top)
+   {
+   heapframe *new;
+   PCRE2_SIZE newsize;
++  PCRE2_SIZE usedsize = (char *)N - (char *)(match_data->heapframes);
+   if (match_data->heapframes_size >= PCRE2_SIZE_MAX / 2)
+     {
+@@ -679,7 +676,8 @@ if (N >= frames_top)
+   if (newsize / 1024 >= mb->heap_limit)
+     {
+     PCRE2_SIZE old_size = match_data->heapframes_size / 1024;
+-    if (mb->heap_limit <= old_size) return PCRE2_ERROR_HEAPLIMIT;
++    if (mb->heap_limit <= old_size)
++      return PCRE2_ERROR_HEAPLIMIT;
+     else
+       {
+       PCRE2_SIZE max_delta = 1024 * (mb->heap_limit - old_size);
+@@ -689,19 +687,21 @@ if (N >= frames_top)
+       }
+     }
++  /* With a heap limit set, the permitted additional size may not be enough for
++  another frame, so do a final check. */
++
++  if (newsize - usedsize < frame_size) return PCRE2_ERROR_HEAPLIMIT;
+   new = match_data->memctl.malloc(newsize, match_data->memctl.memory_data);
+   if (new == NULL) return PCRE2_ERROR_NOMEMORY;
+-  memcpy(new, match_data->heapframes, heapframes_size);
++  memcpy(new, match_data->heapframes, usedsize);
+-  F = (heapframe *)((char *)new + ((char *)F - (char *)match_data->heapframes));
+-  N = (heapframe *)((char *)F + frame_size);
++  N = (heapframe *)((char *)new + usedsize);
++  F = (heapframe *)((char *)N - frame_size);
+   match_data->memctl.free(match_data->heapframes, match_data->memctl.memory_data);
+   match_data->heapframes = new;
+   match_data->heapframes_size = newsize;
+-
+-  heapframes_size = (newsize / frame_size) * frame_size;
+-  frames_top = (heapframe *)((char *)new + heapframes_size);
++  frames_top = (heapframe *)((char *)new + newsize);
+   }
+ #ifdef DEBUG_SHOW_RMATCH
+@@ -6842,8 +6842,7 @@ mb->match_limit_depth = (mcontext->depth_limit < re->limit_depth)?
+ /* If a pattern has very many capturing parentheses, the frame size may be very
+ large. Set the initial frame vector size to ensure that there are at least 10
+ available frames, but enforce a minimum of START_FRAMES_SIZE. If this is
+-greater than the heap limit, get as large a vector as possible. Always round
+-the size to a multiple of the frame size. */
++greater than the heap limit, get as large a vector as possible. */
+ heapframes_size = frame_size * 10;
+ if (heapframes_size < START_FRAMES_SIZE) heapframes_size = START_FRAMES_SIZE;
+@@ -7301,7 +7300,6 @@ for(;;)
+   mb->match_call_count = 0;
+   mb->end_offset_top = 0;
+   mb->skip_arg_count = 0;
+-
+   rc = match(start_match, mb->start_code, re->top_bracket, frame_size,
+     match_data, mb);
+diff --git a/testdata/testinput15 b/testdata/testinput15
+index 22d739bc..61fff2cc 100644
+--- a/testdata/testinput15
++++ b/testdata/testinput15
+@@ -6,12 +6,17 @@
+ # (2) Other tests that must not be run with JIT.
+-# This test is first so that it doesn't inherit a large enough heap frame 
++# These tests are first so that they don't inherit a large enough heap frame 
+ # vector from a previous test.
+ /(*LIMIT_HEAP=21)\[(a)]{60}/expand
+     \[a]{60}
++"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()"
++  xx
++
++# -----------------------------------------------------------------------
++
+ /(a+)*zz/I
+   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits_noheap
+   aaaaaaaaaaaaaz\=find_limits_noheap
+diff --git a/testdata/testoutput15 b/testdata/testoutput15
+index af0d7c2a..be7afd0f 100644
+--- a/testdata/testoutput15
++++ b/testdata/testoutput15
+@@ -6,13 +6,19 @@
+ # (2) Other tests that must not be run with JIT.
+-# This test is first so that it doesn't inherit a large enough heap frame 
++# These tests are first so that they don't inherit a large enough heap frame 
+ # vector from a previous test.
+ /(*LIMIT_HEAP=21)\[(a)]{60}/expand
+     \[a]{60}
+ Failed: error -63: heap limit exceeded
++"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()"
++  xx
++Failed: error -63: heap limit exceeded
++
++# -----------------------------------------------------------------------
++
+ /(a+)*zz/I
+ Capture group count = 1
+ Starting code units: a z 
+-- 
+2.51.2.vfs.0.0
+
diff --git a/patches/pcre2-10.44-Fix-incorrect-compiling.patch b/patches/pcre2-10.44-Fix-incorrect-compiling.patch
new file mode 100644 (file)
index 0000000..6b951f9
--- /dev/null
@@ -0,0 +1,64 @@
+From 0d7159ca52771daa8b5cafc422b6c140aa7a11d7 Mon Sep 17 00:00:00 2001
+From: Philip Hazel <Philip.Hazel@gmail.com>
+Date: Fri, 1 Mar 2024 17:23:34 +0000
+Subject: [PATCH] Fix incorrect compiling when variable-length lookbehind's
+ first branch was not the shortest and there was a backreference to a
+ groupwithin the lookbehind.
+
+Cherry-picked from 4a6a8b056f39079d5e958eac84c2ad173f4680bc.
+---
+ src/pcre2_compile.c  |  2 +-
+ testdata/testinput2  |  4 ++++
+ testdata/testoutput2 | 10 ++++++++++
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c
+index 8b364977..71c2dbca 100644
+--- a/src/pcre2_compile.c
++++ b/src/pcre2_compile.c
+@@ -9908,7 +9908,7 @@ do
+   *bptr |= branchlength;  /* branchlength never more than 65535 */
+   bptr = *pptrptr;
+   }
+-while (*bptr == META_ALT);
++while (META_CODE(*bptr) == META_ALT);
+ /* If any branch is of variable length, the whole lookbehind is of variable
+ length. If the maximum length of any branch exceeds the maximum for variable
+diff --git a/testdata/testinput2 b/testdata/testinput2
+index 97608542..9b4c0684 100644
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -6099,4 +6099,8 @@ a)"xI
+ /(a(?1)z||(?1)++)$/
+     abcd\=disable_recurseloop_check
++/(((?<=123?456456|ABC)))(?<=\2)../
++    ABCDEFG
++    12345645678910 
++
+ # End of testinput2
+diff --git a/testdata/testoutput2 b/testdata/testoutput2
+index ee1f70b0..30c5a83e 100644
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -18038,6 +18038,16 @@ Failed: error -47: match limit exceeded
+  0: 
+  1: 
++/(((?<=123?456456|ABC)))(?<=\2)../
++    ABCDEFG
++ 0: DE
++ 1: 
++ 2: 
++    12345645678910 
++ 0: 78
++ 1: 
++ 2: 
++
+ # End of testinput2
+ Error -70: PCRE2_ERROR_BADDATA (unknown error number)
+ Error -62: bad serialized data
+-- 
+2.51.2.vfs.0.0
+
diff --git a/patches/pcre2-10.44-Fix-locking-region.patch b/patches/pcre2-10.44-Fix-locking-region.patch
new file mode 100644 (file)
index 0000000..39c1fb0
--- /dev/null
@@ -0,0 +1,38 @@
+From c0fdb5f7013ecc10292ed9e697b3fe901e38cd77 Mon Sep 17 00:00:00 2001
+From: lbonn <lbonn@users.noreply.github.com>
+Date: Tue, 2 Apr 2024 12:55:33 +0200
+Subject: [PATCH] Fix locking region in sjlit_malloc_exec
+
+Cherry-picked from ad89dd8ecd25589d236bd20b36f2abf69f938fd1
+(https://github.com/zherczeg/sljit.git)
+
+The locked section needs to extend until we are done modifying internal
+block offsets and sizes, otherwise we risk running into data corruption
+in a multi-threaded context.
+
+This bug was introduced in 7de0fee9a7376b33e31a3903487cd9933da3a606
+---
+ src/sljit/allocator_src/sljitExecAllocatorCore.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sljit/allocator_src/sljitExecAllocatorCore.c b/src/sljit/allocator_src/sljitExecAllocatorCore.c
+index 6cd39110..4ef39c17 100644
+--- a/src/sljit/allocator_src/sljitExecAllocatorCore.c
++++ b/src/sljit/allocator_src/sljitExecAllocatorCore.c
+@@ -237,12 +237,12 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
+               header->size = chunk_size;
+               next_header = AS_BLOCK_HEADER(header, chunk_size);
+       }
+-      SLJIT_ALLOCATOR_UNLOCK();
+       next_header->size = 1;
+       next_header->prev_size = chunk_size;
+ #ifdef SLJIT_HAS_EXECUTABLE_OFFSET
+       next_header->executable_offset = executable_offset;
+ #endif /* SLJIT_HAS_EXECUTABLE_OFFSET */
++      SLJIT_ALLOCATOR_UNLOCK();
+       return MEM_START(header);
+ }
+-- 
+2.51.2.vfs.0.0
+
diff --git a/patches/pcre2-10.45-Memory-reports-only-compiled.patch b/patches/pcre2-10.45-Memory-reports-only-compiled.patch
new file mode 100644 (file)
index 0000000..9338088
--- /dev/null
@@ -0,0 +1,5228 @@
+From e669b61ecf6ae3af2a4f0c714c6723ccc073ecd5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
+Date: Sun, 9 Jun 2024 08:22:15 -0700
+Subject: [PATCH] pcre2test: memory reports only compiled memory usage for
+ code/data (#418)
+
+Cherry-pick of 57906628d7babd27c01eb1c085d3e0cdd512189a.
+
+Since 05aafb2 (Implement pcre2_set_max_pattern_compiled_length() and set
+this limit in the fuzzer, 2024-04-24), the memory modifier has reported
+the full size of the allocated "code" returned by `pcre2_compile`.
+
+Problem is that the size of the structure used to hold that in memory also
+depends on the platform ABI and even alignment by the compiler, and has
+been therefore fragile to compare.
+
+Revert to reporting only the additional memory that `pcre2_compile()` will
+use for the compiled pattern (including any data tables) and make sure
+that the limit provided with `pcre2_set_max_pattern_compiled_length()`
+also avoid the internal struct overhead.
+
+Fixes: #415
+---
+ doc/pcre2_set_max_pattern_compiled_length.3 |   8 +-
+ src/pcre2_compile.c                         |   4 +-
+ src/pcre2test.c                             |  17 +-
+ testdata/testoutput8-16-2                   | 171 +++++++-------------
+ testdata/testoutput8-16-3                   | 171 +++++++-------------
+ testdata/testoutput8-16-4                   | 171 +++++++-------------
+ testdata/testoutput8-32-2                   | 171 +++++++-------------
+ testdata/testoutput8-32-3                   | 171 +++++++-------------
+ testdata/testoutput8-32-4                   | 171 +++++++-------------
+ testdata/testoutput8-8-2                    | 171 +++++++-------------
+ testdata/testoutput8-8-3                    | 171 +++++++-------------
+ testdata/testoutput8-8-4                    | 171 +++++++-------------
+ 12 files changed, 546 insertions(+), 1022 deletions(-)
+
+diff --git a/doc/pcre2_set_max_pattern_compiled_length.3 b/doc/pcre2_set_max_pattern_compiled_length.3
+index 472a7bbd..679c12c2 100644
+--- a/doc/pcre2_set_max_pattern_compiled_length.3
++++ b/doc/pcre2_set_max_pattern_compiled_length.3
+@@ -1,4 +1,4 @@
+-.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "24 April 2024" "PCRE2 10.44"
++.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "8 Jun 2024" "PCRE2 10.45"
+ .SH NAME
+ PCRE2 - Perl-compatible regular expressions (revised API)
+ .SH SYNOPSIS
+@@ -15,9 +15,9 @@ PCRE2 - Perl-compatible regular expressions (revised API)
+ .rs
+ .sp
+ This function sets, in a compile context, the maximum size (in bytes) for the
+-memory needed to hold the compiled version of a pattern that is compiled with
+-this context. The result is always zero. If a pattern that is passed to
+-\fBpcre2_compile()\fP with this context needs more memory, an error is
++memory needed to hold the compiled version of a pattern that is using this
++context. The result is always zero. If a pattern that is passed to
++\fBpcre2_compile()\fP referencing this context needs more memory, an error is
+ generated. The default is the largest number that a PCRE2_SIZE variable can
+ hold, which is effectively unlimited.
+ .P
+diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c
+index 8e6787ab..cc5b9674 100644
+--- a/src/pcre2_compile.c
++++ b/src/pcre2_compile.c
+@@ -10608,8 +10608,7 @@ block for storing the compiled pattern and names table. Integer overflow should
+ no longer be possible because nowadays we limit the maximum value of
+ cb.names_found and cb.name_entry_size. */
+-re_blocksize = sizeof(pcre2_real_code) +
+-  CU2BYTES(length +
++re_blocksize = CU2BYTES(length +
+   (PCRE2_SIZE)cb.names_found * (PCRE2_SIZE)cb.name_entry_size);
+ if (re_blocksize > ccontext->max_pattern_compiled_length)
+@@ -10618,6 +10617,7 @@ if (re_blocksize > ccontext->max_pattern_compiled_length)
+   goto HAD_CB_ERROR;
+   }
++re_blocksize += sizeof(pcre2_real_code);
+ re = (pcre2_real_code *)
+   ccontext->memctl.malloc(re_blocksize, ccontext->memctl.memory_data);
+ if (re == NULL)
+diff --git a/src/pcre2test.c b/src/pcre2test.c
+index 37903451..550ae4e4 100644
+--- a/src/pcre2test.c
++++ b/src/pcre2test.c
+@@ -4397,7 +4397,7 @@ static void
+ show_memory_info(void)
+ {
+ uint32_t name_count, name_entry_size;
+-PCRE2_SIZE size, cblock_size;
++PCRE2_SIZE size, cblock_size, data_size;
+ /* One of the test_mode values will always be true, but to stop a compiler
+ warning we must initialize cblock_size. */
+@@ -4417,18 +4417,19 @@ if (test_mode == PCRE32_MODE) cblock_size = sizeof(pcre2_real_code_32);
+ (void)pattern_info(PCRE2_INFO_NAMECOUNT, &name_count, FALSE);
+ (void)pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &name_entry_size, FALSE);
+-/* The uint32_t variables are cast before multiplying to stop code analyzers
+-grumbling about potential overflow. */
++/* The uint32_t variables are cast before multiplying to avoid potential
++ integer overflow. */
++data_size = (PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size * (PCRE2_SIZE)code_unit_size;
+-fprintf(outfile, "Memory allocation - compiled block : %" SIZ_FORM "\n", size);
+-fprintf(outfile, "Memory allocation - code portion   : %" SIZ_FORM "\n", size -
+-  (PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size * (PCRE2_SIZE)code_unit_size -
+-  cblock_size);
++fprintf(outfile, "Memory allocation - code size : %" SIZ_FORM "\n", size -
++  cblock_size - data_size);
++if (data_size != 0)
++  fprintf(outfile, "Memory allocation - data size : %" SIZ_FORM "\n", data_size);
+ if (pat_patctl.jit != 0)
+   {
+   (void)pattern_info(PCRE2_INFO_JITSIZE, &size, FALSE);
+-  fprintf(outfile, "Memory allocation - JIT code       : %" SIZ_FORM "\n", size);
++  fprintf(outfile, "Memory allocation - JIT code  : %" SIZ_FORM "\n", size);
+   }
+ }
+diff --git a/testdata/testoutput8-16-2 b/testdata/testoutput8-16-2
+index bcb9e177..108c0bea 100644
+--- a/testdata/testoutput8-16-2
++++ b/testdata/testoutput8-16-2
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2   5 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 174
+-Memory allocation - code portion   : 38
++Memory allocation - code size : 38
+ ------------------------------------------------------------------
+   0  16 Bra
+   2   7 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 38
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 172
+-Memory allocation - code portion   : 36
++Memory allocation - code size : 36
+ ------------------------------------------------------------------
+   0  15 Bra
+   2   6 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 36
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 182
+-Memory allocation - code portion   : 46
++Memory allocation - code size : 46
+ ------------------------------------------------------------------
+   0  20 Bra
+   2     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 46
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   2 Bra
+   2   2 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   7 Bra
+   2     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 20
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 26
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 278
+-Memory allocation - code portion   : 142
++Memory allocation - code size : 142
+ ------------------------------------------------------------------
+   0  68 Bra
+   2     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 142
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 1784
+-Memory allocation - code portion   : 1648
++Memory allocation - code size : 1648
+ ------------------------------------------------------------------
+   0 821 Bra
+   2     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 1648
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 1764
+-Memory allocation - code portion   : 1628
++Memory allocation - code size : 1628
+ ------------------------------------------------------------------
+   0 811 Bra
+   2     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 1628
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  13 Bra
+   2   9 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 176
+-Memory allocation - code portion   : 40
++Memory allocation - code size : 40
+ ------------------------------------------------------------------
+   0  17 Bra
+   2  13 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 40
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 242
+-Memory allocation - code portion   : 54
++Memory allocation - code size : 54
++Memory allocation - data size : 52
+ ------------------------------------------------------------------
+   0  24 Bra
+   2     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 54
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 218
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
++Memory allocation - data size : 18
+ ------------------------------------------------------------------
+   0  29 Bra
+   2  18 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 54
++Memory allocation - code size : 54
++Memory allocation - data size : 6
+ ------------------------------------------------------------------
+   0  24 Bra
+   2   5 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 54
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 186
+-Memory allocation - code portion   : 50
++Memory allocation - code size : 50
+ ------------------------------------------------------------------
+   0  22 Bra
+   2     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 50
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 214
+-Memory allocation - code portion   : 78
++Memory allocation - code size : 78
+ ------------------------------------------------------------------
+   0  36 Bra
+   2     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 78
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 152
+-Memory allocation - code portion   : 16
++Memory allocation - code size : 16
+ ------------------------------------------------------------------
+   0   5 Bra
+   2     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 16
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 152
+-Memory allocation - code portion   : 16
++Memory allocation - code size : 16
+ ------------------------------------------------------------------
+   0   5 Bra
+   2     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 16
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 152
+-Memory allocation - code portion   : 16
++Memory allocation - code size : 16
+ ------------------------------------------------------------------
+   0   5 Bra
+   2     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 16
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 158
+-Memory allocation - code portion   : 22
++Memory allocation - code size : 22
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \x{c5b4}
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 158
+-Memory allocation - code portion   : 22
++Memory allocation - code size : 22
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x{8a9e}
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 190
+-Memory allocation - code portion   : 54
++Memory allocation - code size : 54
+ ------------------------------------------------------------------
+   0  24 Bra
+   2     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 54
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 26
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 26
+ Failed: error 106 at offset 13: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  27 Bra
+   2     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 194
+-Memory allocation - code portion   : 58
++Memory allocation - code size : 58
+ ------------------------------------------------------------------
+   0  26 Bra
+   2     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 58
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  13 Bra
+   2  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  13 Bra
+   2     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  23 Bra
+   2  19 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 178
+-Memory allocation - code portion   : 42
++Memory allocation - code size : 42
+ ------------------------------------------------------------------
+   0  18 Bra
+   2  14 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 42
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+diff --git a/testdata/testoutput8-16-3 b/testdata/testoutput8-16-3
+index 4ec13ea9..28acd251 100644
+--- a/testdata/testoutput8-16-3
++++ b/testdata/testoutput8-16-3
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  12 Bra
+   3   6 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0  20 Bra
+   3   8 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 182
+-Memory allocation - code portion   : 46
++Memory allocation - code size : 46
+ ------------------------------------------------------------------
+   0  19 Bra
+   3   7 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 46
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 186
+-Memory allocation - code portion   : 50
++Memory allocation - code size : 50
+ ------------------------------------------------------------------
+   0  21 Bra
+   3     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 50
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   3 Bra
+   3   3 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   8 Bra
+   3     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 170
+-Memory allocation - code portion   : 34
++Memory allocation - code size : 34
+ ------------------------------------------------------------------
+   0  13 Bra
+   3     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 34
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 302
+-Memory allocation - code portion   : 166
++Memory allocation - code size : 166
+ ------------------------------------------------------------------
+   0  79 Bra
+   3     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 166
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 1788
+-Memory allocation - code portion   : 1652
++Memory allocation - code size : 1652
+ ------------------------------------------------------------------
+   0 822 Bra
+   3     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 1652
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 1768
+-Memory allocation - code portion   : 1632
++Memory allocation - code size : 1632
+ ------------------------------------------------------------------
+   0 812 Bra
+   3     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 1632
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 178
+-Memory allocation - code portion   : 42
++Memory allocation - code size : 42
+ ------------------------------------------------------------------
+   0  17 Bra
+   3  11 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 42
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 190
+-Memory allocation - code portion   : 54
++Memory allocation - code size : 54
+ ------------------------------------------------------------------
+   0  23 Bra
+   3  17 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 54
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 256
+-Memory allocation - code portion   : 68
++Memory allocation - code size : 68
++Memory allocation - data size : 52
+ ------------------------------------------------------------------
+   0  30 Bra
+   3     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 68
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 238
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
++Memory allocation - data size : 18
+ ------------------------------------------------------------------
+   0  38 Bra
+   3  23 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 206
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
++Memory allocation - data size : 6
+ ------------------------------------------------------------------
+   0  28 Bra
+   3   6 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 198
+-Memory allocation - code portion   : 62
++Memory allocation - code size : 62
+ ------------------------------------------------------------------
+   0  27 Bra
+   3     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 62
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 242
+-Memory allocation - code portion   : 106
++Memory allocation - code size : 106
+ ------------------------------------------------------------------
+   0  49 Bra
+   3     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 106
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 20
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 20
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 20
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0   9 Bra
+   3     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \x{c5b4}
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0   9 Bra
+   3     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x{8a9e}
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  26 Bra
+   3     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  12 Bra
+   3     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  12 Bra
+   3     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 32
+ Failed: error 106 at offset 13: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 202
+-Memory allocation - code portion   : 66
++Memory allocation - code size : 66
+ ------------------------------------------------------------------
+   0  29 Bra
+   3     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 66
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 200
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
+ ------------------------------------------------------------------
+   0  28 Bra
+   3     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 172
+-Memory allocation - code portion   : 36
++Memory allocation - code size : 36
+ ------------------------------------------------------------------
+   0  14 Bra
+   3  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 36
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 172
+-Memory allocation - code portion   : 36
++Memory allocation - code size : 36
+ ------------------------------------------------------------------
+   0  14 Bra
+   3     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 36
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 206
+-Memory allocation - code portion   : 70
++Memory allocation - code size : 70
+ ------------------------------------------------------------------
+   0  31 Bra
+   3  25 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 70
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 192
+-Memory allocation - code portion   : 56
++Memory allocation - code size : 56
+ ------------------------------------------------------------------
+   0  24 Bra
+   3  18 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 56
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^\x{aa}]
+diff --git a/testdata/testoutput8-16-4 b/testdata/testoutput8-16-4
+index 4ec13ea9..28acd251 100644
+--- a/testdata/testoutput8-16-4
++++ b/testdata/testoutput8-16-4
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  12 Bra
+   3   6 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0  20 Bra
+   3   8 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 182
+-Memory allocation - code portion   : 46
++Memory allocation - code size : 46
+ ------------------------------------------------------------------
+   0  19 Bra
+   3   7 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 46
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 186
+-Memory allocation - code portion   : 50
++Memory allocation - code size : 50
+ ------------------------------------------------------------------
+   0  21 Bra
+   3     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 50
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   3 Bra
+   3   3 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0   8 Bra
+   3     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 170
+-Memory allocation - code portion   : 34
++Memory allocation - code size : 34
+ ------------------------------------------------------------------
+   0  13 Bra
+   3     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 34
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 302
+-Memory allocation - code portion   : 166
++Memory allocation - code size : 166
+ ------------------------------------------------------------------
+   0  79 Bra
+   3     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 166
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 1788
+-Memory allocation - code portion   : 1652
++Memory allocation - code size : 1652
+ ------------------------------------------------------------------
+   0 822 Bra
+   3     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 1652
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 1768
+-Memory allocation - code portion   : 1632
++Memory allocation - code size : 1632
+ ------------------------------------------------------------------
+   0 812 Bra
+   3     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 1632
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 178
+-Memory allocation - code portion   : 42
++Memory allocation - code size : 42
+ ------------------------------------------------------------------
+   0  17 Bra
+   3  11 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 42
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 190
+-Memory allocation - code portion   : 54
++Memory allocation - code size : 54
+ ------------------------------------------------------------------
+   0  23 Bra
+   3  17 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 54
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 256
+-Memory allocation - code portion   : 68
++Memory allocation - code size : 68
++Memory allocation - data size : 52
+ ------------------------------------------------------------------
+   0  30 Bra
+   3     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 68
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 238
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
++Memory allocation - data size : 18
+ ------------------------------------------------------------------
+   0  38 Bra
+   3  23 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 206
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
++Memory allocation - data size : 6
+ ------------------------------------------------------------------
+   0  28 Bra
+   3   6 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 198
+-Memory allocation - code portion   : 62
++Memory allocation - code size : 62
+ ------------------------------------------------------------------
+   0  27 Bra
+   3     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 62
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 242
+-Memory allocation - code portion   : 106
++Memory allocation - code size : 106
+ ------------------------------------------------------------------
+   0  49 Bra
+   3     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 106
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 20
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 20
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 20
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0   9 Bra
+   3     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \x{c5b4}
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0   9 Bra
+   3     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x{8a9e}
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  26 Bra
+   3     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  12 Bra
+   3     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  12 Bra
+   3     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 32
+ Failed: error 106 at offset 13: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 202
+-Memory allocation - code portion   : 66
++Memory allocation - code size : 66
+ ------------------------------------------------------------------
+   0  29 Bra
+   3     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 66
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 200
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
+ ------------------------------------------------------------------
+   0  28 Bra
+   3     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 172
+-Memory allocation - code portion   : 36
++Memory allocation - code size : 36
+ ------------------------------------------------------------------
+   0  14 Bra
+   3  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 36
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 172
+-Memory allocation - code portion   : 36
++Memory allocation - code size : 36
+ ------------------------------------------------------------------
+   0  14 Bra
+   3     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 36
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 206
+-Memory allocation - code portion   : 70
++Memory allocation - code size : 70
+ ------------------------------------------------------------------
+   0  31 Bra
+   3  25 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 70
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 192
+-Memory allocation - code portion   : 56
++Memory allocation - code size : 56
+ ------------------------------------------------------------------
+   0  24 Bra
+   3  18 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 56
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^\x{aa}]
+diff --git a/testdata/testoutput8-32-2 b/testdata/testoutput8-32-2
+index d76f3aaa..90ea536f 100644
+--- a/testdata/testoutput8-32-2
++++ b/testdata/testoutput8-32-2
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2   5 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 212
+-Memory allocation - code portion   : 76
++Memory allocation - code size : 76
+ ------------------------------------------------------------------
+   0  16 Bra
+   2   7 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 76
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 208
+-Memory allocation - code portion   : 72
++Memory allocation - code size : 72
+ ------------------------------------------------------------------
+   0  15 Bra
+   2   6 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 72
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   2 Bra
+   2   2 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 176
+-Memory allocation - code portion   : 40
++Memory allocation - code size : 40
+ ------------------------------------------------------------------
+   0   7 Bra
+   2     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 40
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 356
+-Memory allocation - code portion   : 220
++Memory allocation - code size : 220
+ ------------------------------------------------------------------
+   0  52 Bra
+   2     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 220
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 3432
+-Memory allocation - code portion   : 3296
++Memory allocation - code size : 3296
+ ------------------------------------------------------------------
+   0 821 Bra
+   2     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 3296
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 3392
+-Memory allocation - code portion   : 3256
++Memory allocation - code size : 3256
+ ------------------------------------------------------------------
+   0 811 Bra
+   2     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 3256
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 200
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
+ ------------------------------------------------------------------
+   0  13 Bra
+   2   9 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 216
+-Memory allocation - code portion   : 80
++Memory allocation - code size : 80
+ ------------------------------------------------------------------
+   0  17 Bra
+   2  13 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 80
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 348
+-Memory allocation - code portion   : 108
++Memory allocation - code size : 108
++Memory allocation - data size : 104
+ ------------------------------------------------------------------
+   0  24 Bra
+   2     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 108
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 300
+-Memory allocation - code portion   : 128
++Memory allocation - code size : 128
++Memory allocation - data size : 36
+ ------------------------------------------------------------------
+   0  29 Bra
+   2  18 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 128
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 256
+-Memory allocation - code portion   : 108
++Memory allocation - code size : 108
++Memory allocation - data size : 12
+ ------------------------------------------------------------------
+   0  24 Bra
+   2   5 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 108
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 236
+-Memory allocation - code portion   : 100
++Memory allocation - code size : 100
+ ------------------------------------------------------------------
+   0  22 Bra
+   2     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 100
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 292
+-Memory allocation - code portion   : 156
++Memory allocation - code size : 156
+ ------------------------------------------------------------------
+   0  36 Bra
+   2     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 156
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 28
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \x{c5b4}
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x{8a9e}
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 212
+-Memory allocation - code portion   : 76
++Memory allocation - code size : 76
+ ------------------------------------------------------------------
+   0  16 Bra
+   2     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 76
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 52
+ Failed: error 106 at offset 13: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 224
+-Memory allocation - code portion   : 88
++Memory allocation - code size : 88
+ ------------------------------------------------------------------
+   0  19 Bra
+   2     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 88
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 220
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
+ ------------------------------------------------------------------
+   0  18 Bra
+   2     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 240
+-Memory allocation - code portion   : 104
++Memory allocation - code size : 104
+ ------------------------------------------------------------------
+   0  23 Bra
+   2  19 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 104
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 220
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
+ ------------------------------------------------------------------
+   0  18 Bra
+   2  14 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+diff --git a/testdata/testoutput8-32-3 b/testdata/testoutput8-32-3
+index d76f3aaa..90ea536f 100644
+--- a/testdata/testoutput8-32-3
++++ b/testdata/testoutput8-32-3
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2   5 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 212
+-Memory allocation - code portion   : 76
++Memory allocation - code size : 76
+ ------------------------------------------------------------------
+   0  16 Bra
+   2   7 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 76
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 208
+-Memory allocation - code portion   : 72
++Memory allocation - code size : 72
+ ------------------------------------------------------------------
+   0  15 Bra
+   2   6 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 72
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   2 Bra
+   2   2 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 176
+-Memory allocation - code portion   : 40
++Memory allocation - code size : 40
+ ------------------------------------------------------------------
+   0   7 Bra
+   2     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 40
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 356
+-Memory allocation - code portion   : 220
++Memory allocation - code size : 220
+ ------------------------------------------------------------------
+   0  52 Bra
+   2     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 220
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 3432
+-Memory allocation - code portion   : 3296
++Memory allocation - code size : 3296
+ ------------------------------------------------------------------
+   0 821 Bra
+   2     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 3296
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 3392
+-Memory allocation - code portion   : 3256
++Memory allocation - code size : 3256
+ ------------------------------------------------------------------
+   0 811 Bra
+   2     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 3256
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 200
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
+ ------------------------------------------------------------------
+   0  13 Bra
+   2   9 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 216
+-Memory allocation - code portion   : 80
++Memory allocation - code size : 80
+ ------------------------------------------------------------------
+   0  17 Bra
+   2  13 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 80
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 348
+-Memory allocation - code portion   : 108
++Memory allocation - code size : 108
++Memory allocation - data size : 104
+ ------------------------------------------------------------------
+   0  24 Bra
+   2     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 108
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 300
+-Memory allocation - code portion   : 128
++Memory allocation - code size : 128
++Memory allocation - data size : 36
+ ------------------------------------------------------------------
+   0  29 Bra
+   2  18 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 128
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 256
+-Memory allocation - code portion   : 108
++Memory allocation - code size : 108
++Memory allocation - data size : 12
+ ------------------------------------------------------------------
+   0  24 Bra
+   2   5 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 108
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 236
+-Memory allocation - code portion   : 100
++Memory allocation - code size : 100
+ ------------------------------------------------------------------
+   0  22 Bra
+   2     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 100
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 292
+-Memory allocation - code portion   : 156
++Memory allocation - code size : 156
+ ------------------------------------------------------------------
+   0  36 Bra
+   2     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 156
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 28
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \x{c5b4}
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x{8a9e}
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 212
+-Memory allocation - code portion   : 76
++Memory allocation - code size : 76
+ ------------------------------------------------------------------
+   0  16 Bra
+   2     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 76
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 52
+ Failed: error 106 at offset 13: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 224
+-Memory allocation - code portion   : 88
++Memory allocation - code size : 88
+ ------------------------------------------------------------------
+   0  19 Bra
+   2     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 88
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 220
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
+ ------------------------------------------------------------------
+   0  18 Bra
+   2     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 240
+-Memory allocation - code portion   : 104
++Memory allocation - code size : 104
+ ------------------------------------------------------------------
+   0  23 Bra
+   2  19 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 104
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 220
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
+ ------------------------------------------------------------------
+   0  18 Bra
+   2  14 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+diff --git a/testdata/testoutput8-32-4 b/testdata/testoutput8-32-4
+index d76f3aaa..90ea536f 100644
+--- a/testdata/testoutput8-32-4
++++ b/testdata/testoutput8-32-4
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2   5 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 212
+-Memory allocation - code portion   : 76
++Memory allocation - code size : 76
+ ------------------------------------------------------------------
+   0  16 Bra
+   2   7 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 76
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 208
+-Memory allocation - code portion   : 72
++Memory allocation - code size : 72
+ ------------------------------------------------------------------
+   0  15 Bra
+   2   6 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 72
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0   2 Bra
+   2   2 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 176
+-Memory allocation - code portion   : 40
++Memory allocation - code size : 40
+ ------------------------------------------------------------------
+   0   7 Bra
+   2     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 40
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 356
+-Memory allocation - code portion   : 220
++Memory allocation - code size : 220
+ ------------------------------------------------------------------
+   0  52 Bra
+   2     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 220
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 3432
+-Memory allocation - code portion   : 3296
++Memory allocation - code size : 3296
+ ------------------------------------------------------------------
+   0 821 Bra
+   2     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 3296
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 3392
+-Memory allocation - code portion   : 3256
++Memory allocation - code size : 3256
+ ------------------------------------------------------------------
+   0 811 Bra
+   2     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 3256
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 200
+-Memory allocation - code portion   : 64
++Memory allocation - code size : 64
+ ------------------------------------------------------------------
+   0  13 Bra
+   2   9 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 64
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 216
+-Memory allocation - code portion   : 80
++Memory allocation - code size : 80
+ ------------------------------------------------------------------
+   0  17 Bra
+   2  13 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 80
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 348
+-Memory allocation - code portion   : 108
++Memory allocation - code size : 108
++Memory allocation - data size : 104
+ ------------------------------------------------------------------
+   0  24 Bra
+   2     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 108
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 300
+-Memory allocation - code portion   : 128
++Memory allocation - code size : 128
++Memory allocation - data size : 36
+ ------------------------------------------------------------------
+   0  29 Bra
+   2  18 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 128
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 256
+-Memory allocation - code portion   : 108
++Memory allocation - code size : 108
++Memory allocation - data size : 12
+ ------------------------------------------------------------------
+   0  24 Bra
+   2   5 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 108
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 236
+-Memory allocation - code portion   : 100
++Memory allocation - code size : 100
+ ------------------------------------------------------------------
+   0  22 Bra
+   2     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 100
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 292
+-Memory allocation - code portion   : 156
++Memory allocation - code size : 156
+ ------------------------------------------------------------------
+   0  36 Bra
+   2     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 156
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 28
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \x{c5b4}
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0   8 Bra
+   2     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x{8a9e}
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 212
+-Memory allocation - code portion   : 76
++Memory allocation - code size : 76
+ ------------------------------------------------------------------
+   0  16 Bra
+   2     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 76
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 52
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 188
+-Memory allocation - code portion   : 52
++Memory allocation - code size : 52
+ ------------------------------------------------------------------
+   0  10 Bra
+   2     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 52
+ Failed: error 106 at offset 13: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 224
+-Memory allocation - code portion   : 88
++Memory allocation - code size : 88
+ ------------------------------------------------------------------
+   0  19 Bra
+   2     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 88
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 220
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
+ ------------------------------------------------------------------
+   0  18 Bra
+   2     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 196
+-Memory allocation - code portion   : 60
++Memory allocation - code size : 60
+ ------------------------------------------------------------------
+   0  12 Bra
+   2     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 60
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0   9 Bra
+   2     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 240
+-Memory allocation - code portion   : 104
++Memory allocation - code size : 104
+ ------------------------------------------------------------------
+   0  23 Bra
+   2  19 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 104
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 220
+-Memory allocation - code portion   : 84
++Memory allocation - code size : 84
+ ------------------------------------------------------------------
+   0  18 Bra
+   2  14 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 84
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0   4 Bra
+   2     [^\x{aa}]
+diff --git a/testdata/testoutput8-8-2 b/testdata/testoutput8-8-2
+index f3811d95..779552ac 100644
+--- a/testdata/testoutput8-8-2
++++ b/testdata/testoutput8-8-2
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 153
+-Memory allocation - code portion   : 17
++Memory allocation - code size : 17
+ ------------------------------------------------------------------
+   0  13 Bra
+   3   7 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 17
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 161
+-Memory allocation - code portion   : 25
++Memory allocation - code size : 25
+ ------------------------------------------------------------------
+   0  21 Bra
+   3   9 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 25
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 159
+-Memory allocation - code portion   : 23
++Memory allocation - code size : 23
+ ------------------------------------------------------------------
+   0  19 Bra
+   3   7 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 23
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 177
+-Memory allocation - code portion   : 41
++Memory allocation - code size : 41
+ ------------------------------------------------------------------
+   0  37 Bra
+   3     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 41
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 143
+-Memory allocation - code portion   : 7
++Memory allocation - code size : 7
+ ------------------------------------------------------------------
+   0   3 Bra
+   3   3 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   9 Bra
+   3     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  14 Bra
+   3     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 256
+-Memory allocation - code portion   : 120
++Memory allocation - code size : 120
+ ------------------------------------------------------------------
+   0 116 Bra
+   3     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 120
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 962
+-Memory allocation - code portion   : 826
++Memory allocation - code size : 826
+ ------------------------------------------------------------------
+   0 822 Bra
+   3     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 826
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 952
+-Memory allocation - code portion   : 816
++Memory allocation - code size : 816
+ ------------------------------------------------------------------
+   0 812 Bra
+   3     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 816
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 158
+-Memory allocation - code portion   : 22
++Memory allocation - code size : 22
+ ------------------------------------------------------------------
+   0  18 Bra
+   3  12 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 22
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0  24 Bra
+   3  18 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 200
+-Memory allocation - code portion   : 36
++Memory allocation - code size : 36
++Memory allocation - data size : 28
+ ------------------------------------------------------------------
+   0  32 Bra
+   3     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 36
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 193
+-Memory allocation - code portion   : 45
++Memory allocation - code size : 45
++Memory allocation - data size : 12
+ ------------------------------------------------------------------
+   0  41 Bra
+   3  25 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 45
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 174
+-Memory allocation - code portion   : 34
++Memory allocation - code size : 34
++Memory allocation - data size : 4
+ ------------------------------------------------------------------
+   0  30 Bra
+   3   7 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 34
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 167
+-Memory allocation - code portion   : 31
++Memory allocation - code size : 31
+ ------------------------------------------------------------------
+   0  27 Bra
+   3     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 31
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 189
+-Memory allocation - code portion   : 53
++Memory allocation - code size : 53
+ ------------------------------------------------------------------
+   0  49 Bra
+   3     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 53
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   7 Bra
+   3     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   8 Bra
+   3     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   8 Bra
+   3     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   8 Bra
+   3     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 12
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  14 Bra
+   3     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 155
+-Memory allocation - code portion   : 19
++Memory allocation - code size : 19
+ ------------------------------------------------------------------
+   0  15 Bra
+   3     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \xb4
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 155
+-Memory allocation - code portion   : 19
++Memory allocation - code size : 19
+ ------------------------------------------------------------------
+   0  15 Bra
+   3     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x9e
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 183
+-Memory allocation - code portion   : 47
++Memory allocation - code size : 47
+ ------------------------------------------------------------------
+   0  43 Bra
+   3     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 47
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  14 Bra
+   3     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  14 Bra
+   3     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 18
+ Failed: error 106 at offset 15: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 186
+-Memory allocation - code portion   : 50
++Memory allocation - code size : 50
+ ------------------------------------------------------------------
+   0  46 Bra
+   3     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 50
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0  11 Bra
+   3     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 48
++Memory allocation - code size : 48
+ ------------------------------------------------------------------
+   0  44 Bra
+   3     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 48
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 161
+-Memory allocation - code portion   : 25
++Memory allocation - code size : 25
+ ------------------------------------------------------------------
+   0  21 Bra
+   3  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 25
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 161
+-Memory allocation - code portion   : 25
++Memory allocation - code size : 25
+ ------------------------------------------------------------------
+   0  21 Bra
+   3     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 25
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 153
+-Memory allocation - code portion   : 17
++Memory allocation - code size : 17
+ ------------------------------------------------------------------
+   0  13 Bra
+   3     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 17
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 174
+-Memory allocation - code portion   : 38
++Memory allocation - code size : 38
+ ------------------------------------------------------------------
+   0  34 Bra
+   3  28 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 38
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  26 Bra
+   3  20 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 10
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   5 Bra
+   3     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 9
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 146
+-Memory allocation - code portion   : 10
++Memory allocation - code size : 10
+ ------------------------------------------------------------------
+   0   6 Bra
+   3     [^\x{aa}]
+diff --git a/testdata/testoutput8-8-3 b/testdata/testoutput8-8-3
+index 48e0b8aa..2657ce89 100644
+--- a/testdata/testoutput8-8-3
++++ b/testdata/testoutput8-8-3
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  16 Bra
+   4   8 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 166
+-Memory allocation - code portion   : 30
++Memory allocation - code size : 30
+ ------------------------------------------------------------------
+   0  25 Bra
+   4  10 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 30
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 164
+-Memory allocation - code portion   : 28
++Memory allocation - code size : 28
+ ------------------------------------------------------------------
+   0  23 Bra
+   4   8 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 28
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 179
+-Memory allocation - code portion   : 43
++Memory allocation - code size : 43
+ ------------------------------------------------------------------
+   0  38 Bra
+   4     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 43
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 145
+-Memory allocation - code portion   : 9
++Memory allocation - code size : 9
+ ------------------------------------------------------------------
+   0   4 Bra
+   4   4 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0  10 Bra
+   4     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 158
+-Memory allocation - code portion   : 22
++Memory allocation - code size : 22
+ ------------------------------------------------------------------
+   0  17 Bra
+   4     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 22
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 268
+-Memory allocation - code portion   : 132
++Memory allocation - code size : 132
+ ------------------------------------------------------------------
+   0 127 Bra
+   4     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 132
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 964
+-Memory allocation - code portion   : 828
++Memory allocation - code size : 828
+ ------------------------------------------------------------------
+   0 823 Bra
+   4     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 828
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 954
+-Memory allocation - code portion   : 818
++Memory allocation - code size : 818
+ ------------------------------------------------------------------
+   0 813 Bra
+   4     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 818
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 163
+-Memory allocation - code portion   : 27
++Memory allocation - code size : 27
+ ------------------------------------------------------------------
+   0  22 Bra
+   4  14 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 27
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 171
+-Memory allocation - code portion   : 35
++Memory allocation - code size : 35
+ ------------------------------------------------------------------
+   0  30 Bra
+   4  22 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 35
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 207
+-Memory allocation - code portion   : 43
++Memory allocation - code size : 43
++Memory allocation - data size : 28
+ ------------------------------------------------------------------
+   0  38 Bra
+   4     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 43
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 203
+-Memory allocation - code portion   : 55
++Memory allocation - code size : 55
++Memory allocation - data size : 12
+ ------------------------------------------------------------------
+   0  50 Bra
+   4  30 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 55
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 179
+-Memory allocation - code portion   : 39
++Memory allocation - code size : 39
++Memory allocation - data size : 4
+ ------------------------------------------------------------------
+   0  34 Bra
+   4   8 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 39
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 173
+-Memory allocation - code portion   : 37
++Memory allocation - code size : 37
+ ------------------------------------------------------------------
+   0  32 Bra
+   4     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 37
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 203
+-Memory allocation - code portion   : 67
++Memory allocation - code size : 67
+ ------------------------------------------------------------------
+   0  62 Bra
+   4     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 67
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   8 Bra
+   4     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   9 Bra
+   4     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   9 Bra
+   4     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   9 Bra
+   4     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 14
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0  15 Bra
+   4     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  16 Bra
+   4     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \xb4
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  16 Bra
+   4     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x9e
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 186
+-Memory allocation - code portion   : 50
++Memory allocation - code size : 50
+ ------------------------------------------------------------------
+   0  45 Bra
+   4     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 50
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  16 Bra
+   4     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  16 Bra
+   4     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 21
+ Failed: error 106 at offset 15: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  13 Bra
+   4     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  13 Bra
+   4     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  13 Bra
+   4     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  13 Bra
+   4     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 189
+-Memory allocation - code portion   : 53
++Memory allocation - code size : 53
+ ------------------------------------------------------------------
+   0  48 Bra
+   4     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 53
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 154
+-Memory allocation - code portion   : 18
++Memory allocation - code size : 18
+ ------------------------------------------------------------------
+   0  13 Bra
+   4     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 18
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 187
+-Memory allocation - code portion   : 51
++Memory allocation - code size : 51
+ ------------------------------------------------------------------
+   0  46 Bra
+   4     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 51
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 163
+-Memory allocation - code portion   : 27
++Memory allocation - code size : 27
+ ------------------------------------------------------------------
+   0  22 Bra
+   4  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 27
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 163
+-Memory allocation - code portion   : 27
++Memory allocation - code size : 27
+ ------------------------------------------------------------------
+   0  22 Bra
+   4     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 27
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 156
+-Memory allocation - code portion   : 20
++Memory allocation - code size : 20
+ ------------------------------------------------------------------
+   0  15 Bra
+   4     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 20
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 183
+-Memory allocation - code portion   : 47
++Memory allocation - code size : 47
+ ------------------------------------------------------------------
+   0  42 Bra
+   4  34 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 47
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 173
+-Memory allocation - code portion   : 37
++Memory allocation - code size : 37
+ ------------------------------------------------------------------
+   0  32 Bra
+   4  24 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 37
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 12
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   6 Bra
+   4     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 11
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 148
+-Memory allocation - code portion   : 12
++Memory allocation - code size : 12
+ ------------------------------------------------------------------
+   0   7 Bra
+   4     [^\x{aa}]
+diff --git a/testdata/testoutput8-8-4 b/testdata/testoutput8-8-4
+index 81cf0f76..8bfac41a 100644
+--- a/testdata/testoutput8-8-4
++++ b/testdata/testoutput8-8-4
+@@ -10,8 +10,7 @@
+ #pattern fullbincode,memory
+ /((?i)b)/
+-Memory allocation - compiled block : 161
+-Memory allocation - code portion   : 25
++Memory allocation - code size : 25
+ ------------------------------------------------------------------
+   0  19 Bra
+   5   9 CBra 1
+@@ -22,8 +21,7 @@ Memory allocation - code portion   : 25
+ ------------------------------------------------------------------
+ /(?s)(.*X|^B)/
+-Memory allocation - compiled block : 171
+-Memory allocation - code portion   : 35
++Memory allocation - code size : 35
+ ------------------------------------------------------------------
+   0  29 Bra
+   5  11 CBra 1
+@@ -38,8 +36,7 @@ Memory allocation - code portion   : 35
+ ------------------------------------------------------------------
+ /(?s:.*X|^B)/
+-Memory allocation - compiled block : 169
+-Memory allocation - code portion   : 33
++Memory allocation - code size : 33
+ ------------------------------------------------------------------
+   0  27 Bra
+   5   9 Bra
+@@ -54,8 +51,7 @@ Memory allocation - code portion   : 33
+ ------------------------------------------------------------------
+ /^[[:alnum:]]/
+-Memory allocation - compiled block : 181
+-Memory allocation - code portion   : 45
++Memory allocation - code size : 45
+ ------------------------------------------------------------------
+   0  39 Bra
+   5     ^
+@@ -65,8 +61,7 @@ Memory allocation - code portion   : 45
+ ------------------------------------------------------------------
+ /#/Ix
+-Memory allocation - compiled block : 147
+-Memory allocation - code portion   : 11
++Memory allocation - code size : 11
+ ------------------------------------------------------------------
+   0   5 Bra
+   5   5 Ket
+@@ -78,8 +73,7 @@ Options: extended
+ Subject length lower bound = 0
+ /a#/Ix
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     a
+@@ -92,8 +86,7 @@ First code unit = 'a'
+ Subject length lower bound = 1
+ /x?+/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     x?+
+@@ -102,8 +95,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /x++/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     x++
+@@ -112,8 +104,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /x{1,3}+/
+-Memory allocation - compiled block : 153
+-Memory allocation - code portion   : 17
++Memory allocation - code size : 17
+ ------------------------------------------------------------------
+   0  11 Bra
+   5     x
+@@ -123,8 +114,7 @@ Memory allocation - code portion   : 17
+ ------------------------------------------------------------------
+ /(x)*+/
+-Memory allocation - compiled block : 162
+-Memory allocation - code portion   : 26
++Memory allocation - code size : 26
+ ------------------------------------------------------------------
+   0  20 Bra
+   5     Braposzero
+@@ -136,8 +126,7 @@ Memory allocation - code portion   : 26
+ ------------------------------------------------------------------
+ /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+-Memory allocation - compiled block : 280
+-Memory allocation - code portion   : 144
++Memory allocation - code size : 144
+ ------------------------------------------------------------------
+   0 138 Bra
+   5     ^
+@@ -160,8 +149,7 @@ Memory allocation - code portion   : 144
+ ------------------------------------------------------------------
+ "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 966
+-Memory allocation - code portion   : 830
++Memory allocation - code size : 830
+ ------------------------------------------------------------------
+   0 824 Bra
+   5     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -171,8 +159,7 @@ Memory allocation - code portion   : 830
+ ------------------------------------------------------------------
+ "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b"
+-Memory allocation - compiled block : 956
+-Memory allocation - code portion   : 820
++Memory allocation - code size : 820
+ ------------------------------------------------------------------
+   0 814 Bra
+   5     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
+@@ -182,8 +169,7 @@ Memory allocation - code portion   : 820
+ ------------------------------------------------------------------
+ /(a(?1)b)/
+-Memory allocation - compiled block : 168
+-Memory allocation - code portion   : 32
++Memory allocation - code size : 32
+ ------------------------------------------------------------------
+   0  26 Bra
+   5  16 CBra 1
+@@ -196,8 +182,7 @@ Memory allocation - code portion   : 32
+ ------------------------------------------------------------------
+ /(a(?1)+b)/
+-Memory allocation - compiled block : 178
+-Memory allocation - code portion   : 42
++Memory allocation - code size : 42
+ ------------------------------------------------------------------
+   0  36 Bra
+   5  26 CBra 1
+@@ -212,8 +197,8 @@ Memory allocation - code portion   : 42
+ ------------------------------------------------------------------
+ /a(?P<name1>b|c)d(?P<longername2>e)/
+-Memory allocation - compiled block : 214
+-Memory allocation - code portion   : 50
++Memory allocation - code size : 50
++Memory allocation - data size : 28
+ ------------------------------------------------------------------
+   0  44 Bra
+   5     a
+@@ -231,8 +216,8 @@ Memory allocation - code portion   : 50
+ ------------------------------------------------------------------
+ /(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+-Memory allocation - compiled block : 213
+-Memory allocation - code portion   : 65
++Memory allocation - code size : 65
++Memory allocation - data size : 12
+ ------------------------------------------------------------------
+   0  59 Bra
+   5  35 Bra
+@@ -252,8 +237,8 @@ Memory allocation - code portion   : 65
+ ------------------------------------------------------------------
+ /(?P<a>a)...(?P=a)bbb(?P>a)d/
+-Memory allocation - compiled block : 184
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
++Memory allocation - data size : 4
+ ------------------------------------------------------------------
+   0  38 Bra
+   5   9 CBra 1
+@@ -271,8 +256,7 @@ Memory allocation - code portion   : 44
+ ------------------------------------------------------------------
+ /abc(?C255)de(?C)f/
+-Memory allocation - compiled block : 179
+-Memory allocation - code portion   : 43
++Memory allocation - code size : 43
+ ------------------------------------------------------------------
+   0  37 Bra
+   5     abc
+@@ -285,8 +269,7 @@ Memory allocation - code portion   : 43
+ ------------------------------------------------------------------
+ /abcde/auto_callout
+-Memory allocation - compiled block : 217
+-Memory allocation - code portion   : 81
++Memory allocation - code size : 81
+ ------------------------------------------------------------------
+   0  75 Bra
+   5     Callout 255 0 1
+@@ -305,8 +288,7 @@ Memory allocation - code portion   : 81
+ ------------------------------------------------------------------
+ /\x{100}/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{100}
+@@ -315,8 +297,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{1000}/utf
+-Memory allocation - compiled block : 151
+-Memory allocation - code portion   : 15
++Memory allocation - code size : 15
+ ------------------------------------------------------------------
+   0   9 Bra
+   5     \x{1000}
+@@ -325,8 +306,7 @@ Memory allocation - code portion   : 15
+ ------------------------------------------------------------------
+ /\x{10000}/utf
+-Memory allocation - compiled block : 152
+-Memory allocation - code portion   : 16
++Memory allocation - code size : 16
+ ------------------------------------------------------------------
+   0  10 Bra
+   5     \x{10000}
+@@ -335,8 +315,7 @@ Memory allocation - code portion   : 16
+ ------------------------------------------------------------------
+ /\x{100000}/utf
+-Memory allocation - compiled block : 152
+-Memory allocation - code portion   : 16
++Memory allocation - code size : 16
+ ------------------------------------------------------------------
+   0  10 Bra
+   5     \x{100000}
+@@ -345,8 +324,7 @@ Memory allocation - code portion   : 16
+ ------------------------------------------------------------------
+ /\x{10ffff}/utf
+-Memory allocation - compiled block : 152
+-Memory allocation - code portion   : 16
++Memory allocation - code size : 16
+ ------------------------------------------------------------------
+   0  10 Bra
+   5     \x{10ffff}
+@@ -358,8 +336,7 @@ Memory allocation - code portion   : 16
+ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+ /[\x{ff}]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{ff}
+@@ -368,8 +345,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{100}
+@@ -378,8 +354,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x80/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{80}
+@@ -388,8 +363,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\xff/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{ff}
+@@ -398,8 +372,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+-Memory allocation - compiled block : 158
+-Memory allocation - code portion   : 22
++Memory allocation - code size : 22
+ ------------------------------------------------------------------
+   0  16 Bra
+   5     A\x{2262}\x{391}.
+@@ -413,8 +386,7 @@ Last code unit = '.'
+ Subject length lower bound = 4
+ /\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+-Memory allocation - compiled block : 159
+-Memory allocation - code portion   : 23
++Memory allocation - code size : 23
+ ------------------------------------------------------------------
+   0  17 Bra
+   5     \x{d55c}\x{ad6d}\x{c5b4}
+@@ -428,8 +400,7 @@ Last code unit = \xb4
+ Subject length lower bound = 3
+ /\x{65e5}\x{672c}\x{8a9e}/I,utf
+-Memory allocation - compiled block : 159
+-Memory allocation - code portion   : 23
++Memory allocation - code size : 23
+ ------------------------------------------------------------------
+   0  17 Bra
+   5     \x{65e5}\x{672c}\x{8a9e}
+@@ -443,8 +414,7 @@ Last code unit = \x9e
+ Subject length lower bound = 3
+ /[\x{100}]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{100}
+@@ -453,8 +423,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[Z\x{100}]/utf
+-Memory allocation - compiled block : 189
+-Memory allocation - code portion   : 53
++Memory allocation - code size : 53
+ ------------------------------------------------------------------
+   0  47 Bra
+   5     [Z\x{100}]
+@@ -463,8 +432,7 @@ Memory allocation - code portion   : 53
+ ------------------------------------------------------------------
+ /^[\x{100}\E-\Q\E\x{150}]/utf
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0  18 Bra
+   5     ^
+@@ -474,8 +442,7 @@ Memory allocation - code portion   : 24
+ ------------------------------------------------------------------
+ /^[\QĀ\E-\QŐ\E]/utf
+-Memory allocation - compiled block : 160
+-Memory allocation - code portion   : 24
++Memory allocation - code size : 24
+ ------------------------------------------------------------------
+   0  18 Bra
+   5     ^
+@@ -488,8 +455,7 @@ Memory allocation - code portion   : 24
+ Failed: error 106 at offset 15: missing terminating ] for character class
+ /[\p{L}]/
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  15 Bra
+   5     [\p{L}]
+@@ -498,8 +464,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /[\p{^L}]/
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  15 Bra
+   5     [\P{L}]
+@@ -508,8 +473,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /[\P{L}]/
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  15 Bra
+   5     [\P{L}]
+@@ -518,8 +482,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /[\P{^L}]/
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  15 Bra
+   5     [\p{L}]
+@@ -528,8 +491,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /[abc\p{L}\x{0660}]/utf
+-Memory allocation - compiled block : 192
+-Memory allocation - code portion   : 56
++Memory allocation - code size : 56
+ ------------------------------------------------------------------
+   0  50 Bra
+   5     [a-c\p{L}\x{660}]
+@@ -538,8 +500,7 @@ Memory allocation - code portion   : 56
+ ------------------------------------------------------------------
+ /[\p{Nd}]/utf
+-Memory allocation - compiled block : 157
+-Memory allocation - code portion   : 21
++Memory allocation - code size : 21
+ ------------------------------------------------------------------
+   0  15 Bra
+   5     [\p{Nd}]
+@@ -548,8 +509,7 @@ Memory allocation - code portion   : 21
+ ------------------------------------------------------------------
+ /[\p{Nd}+-]+/utf
+-Memory allocation - compiled block : 190
+-Memory allocation - code portion   : 54
++Memory allocation - code size : 54
+ ------------------------------------------------------------------
+   0  48 Bra
+   5     [+\-\p{Nd}]++
+@@ -558,8 +518,7 @@ Memory allocation - code portion   : 54
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+-Memory allocation - compiled block : 165
+-Memory allocation - code portion   : 29
++Memory allocation - code size : 29
+ ------------------------------------------------------------------
+   0  23 Bra
+   5  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -568,8 +527,7 @@ Memory allocation - code portion   : 29
+ ------------------------------------------------------------------
+ /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+-Memory allocation - compiled block : 165
+-Memory allocation - code portion   : 29
++Memory allocation - code size : 29
+ ------------------------------------------------------------------
+   0  23 Bra
+   5     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+@@ -578,8 +536,7 @@ Memory allocation - code portion   : 29
+ ------------------------------------------------------------------
+ /[\x{105}-\x{109}]/i,utf
+-Memory allocation - compiled block : 159
+-Memory allocation - code portion   : 23
++Memory allocation - code size : 23
+ ------------------------------------------------------------------
+   0  17 Bra
+   5     [\x{104}-\x{109}]
+@@ -588,8 +545,7 @@ Memory allocation - code portion   : 23
+ ------------------------------------------------------------------
+ /( ( (?(1)0|) )*   )/x
+-Memory allocation - compiled block : 192
+-Memory allocation - code portion   : 56
++Memory allocation - code size : 56
+ ------------------------------------------------------------------
+   0  50 Bra
+   5  40 CBra 1
+@@ -607,8 +563,7 @@ Memory allocation - code portion   : 56
+ ------------------------------------------------------------------
+ /(  (?(1)0|)*   )/x
+-Memory allocation - compiled block : 180
+-Memory allocation - code portion   : 44
++Memory allocation - code size : 44
+ ------------------------------------------------------------------
+   0  38 Bra
+   5  28 CBra 1
+@@ -624,8 +579,7 @@ Memory allocation - code portion   : 44
+ ------------------------------------------------------------------
+ /[a]/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     a
+@@ -634,8 +588,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /[a]/utf
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     a
+@@ -644,8 +597,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /[\xaa]/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     \x{aa}
+@@ -654,8 +606,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /[\xaa]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     \x{aa}
+@@ -664,8 +615,7 @@ Memory allocation - code portion   : 14
+ ------------------------------------------------------------------
+ /[^a]/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     [^a]
+@@ -674,8 +624,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /[^a]/utf
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     [^a]
+@@ -684,8 +633,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /[^\xaa]/
+-Memory allocation - compiled block : 149
+-Memory allocation - code portion   : 13
++Memory allocation - code size : 13
+ ------------------------------------------------------------------
+   0   7 Bra
+   5     [^\x{aa}]
+@@ -694,8 +642,7 @@ Memory allocation - code portion   : 13
+ ------------------------------------------------------------------
+ /[^\xaa]/utf
+-Memory allocation - compiled block : 150
+-Memory allocation - code portion   : 14
++Memory allocation - code size : 14
+ ------------------------------------------------------------------
+   0   8 Bra
+   5     [^\x{aa}]
+-- 
+2.51.2.vfs.0.0
+
diff --git a/patches/pcre2-10.47-Fix-for-callback.patch b/patches/pcre2-10.47-Fix-for-callback.patch
new file mode 100644 (file)
index 0000000..7ec98fe
--- /dev/null
@@ -0,0 +1,177 @@
+From 39c3fd67ef9ca22c39f128bf476e238b0e886975 Mon Sep 17 00:00:00 2001
+From: Nicholas Wilson <nicholas@nicholaswilson.me.uk>
+Date: Fri, 26 Sep 2025 11:37:10 +0100
+Subject: [PATCH] Add fix and tests for callback enumerate (#801)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Cherry-pick of commit cc6c84d0207d9d09ca9e42996f0bc50353c03157.
+
+This is a bug in PCRE2 10.45 and 10.46, not present in 10.44 and earlier.
+
+The bug is that applications using pcre2_callout_enumerate() will crash badly on patterns with Unicode (ie non-ASCII) character classes. There is an out-of-bounds read of arbitrary length, including misinterpreting the bytes as offsets, allowing the read to jump forwards in memory to pretty much anywhere.
+
+Applications which call pcre2_callout_enumerate should potentially downgrade to PCRE2 10.44 until we release an update of PCRE2 with the fix.
+
+Since this function is (clearly!!) not used often by applications, I am not currently treating this as very high severity. There is no way for an attacker to make any application call this function, if it is not currently using it.
+
+The root cause seems to be commit 24f9d8d (#540).
+
+---------
+
+Co-authored-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
+---
+ src/pcre2_pattern_info.c |  3 +-
+ src/pcre2test.c          | 61 ++++++++++++++++++++++------------------
+ 2 files changed, 34 insertions(+), 30 deletions(-)
+
+diff --git a/src/pcre2_pattern_info.c b/src/pcre2_pattern_info.c
+index fe4d3c66..c49eaf69 100644
+--- a/src/pcre2_pattern_info.c
++++ b/src/pcre2_pattern_info.c
+@@ -292,8 +292,7 @@ if (re->magic_number != MAGIC_NUMBER) return PCRE2_ERROR_BADMAGIC;
+ if ((re->flags & (PCRE2_CODE_UNIT_WIDTH/8)) == 0) return PCRE2_ERROR_BADMODE;
+ cb.version = 0;
+-cc = (PCRE2_SPTR)((const uint8_t *)re + sizeof(pcre2_real_code))
+-     + re->name_count * re->name_entry_size;
++cc = (PCRE2_SPTR)((uint8_t *)re + re->code_start);
+ while (TRUE)
+   {
+diff --git a/src/pcre2test.c b/src/pcre2test.c
+index 80ab4f80..6ac638ce 100644
+--- a/src/pcre2test.c
++++ b/src/pcre2test.c
+@@ -512,7 +512,6 @@ so many of them that they are split into two fields. */
+ /* Combinations */
+ #define CTL_DEBUG            (CTL_FULLBINCODE|CTL_INFO)  /* For setting */
+-#define CTL_ANYINFO          (CTL_DEBUG|CTL_BINCODE|CTL_CALLOUT_INFO)
+ #define CTL_ANYGLOB          (CTL_ALTGLOBAL|CTL_GLOBAL)
+ /* Second control word */
+@@ -4652,6 +4651,16 @@ fprintf(outfile, "%.*s\n",
+ return 0;
+ }
++/* Backport from 10.47 */
++
++static int callout_enumerate_function_void(pcre2_callout_enumerate_block_8 *cb,
++  void *callout_data)
++{
++(void)cb;
++(void)callout_data;
++return 0;
++}
++
+ /*************************************************
+@@ -4671,9 +4680,16 @@ Returns:    PR_OK     continue processing next line
+ static int
+ show_pattern_info(void)
+ {
++int rc;
+ uint32_t compile_options, overall_options, extra_options;
+ BOOL utf = (FLD(compiled_code, overall_options) & PCRE2_UTF) != 0;
++if ((pat_patctl.control & CTL_MEMORY) != 0)
++  show_memory_info();
++
++if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0)
++  show_framesize();
++
+ if ((pat_patctl.control & (CTL_BINCODE|CTL_FULLBINCODE)) != 0)
+   {
+   fprintf(outfile, "------------------------------------------------------------------\n");
+@@ -5016,17 +5032,17 @@ if ((pat_patctl.control & CTL_INFO) != 0)
+     }
+   }
+-if ((pat_patctl.control & CTL_CALLOUT_INFO) != 0)
++PCRE2_CALLOUT_ENUMERATE(rc,
++  (((pat_patctl.control & CTL_CALLOUT_INFO) != 0)? callout_callback :
++  /* Exercise the callout enumeration code with a dummy callback to make sure
++  it works. */
++  callout_enumerate_function_void), 0);
++if (rc != 0)
+   {
+-  int errorcode;
+-  PCRE2_CALLOUT_ENUMERATE(errorcode, callout_callback, 0);
+-  if (errorcode != 0)
+-    {
+-    fprintf(outfile, "Callout enumerate failed: error %d: ", errorcode);
+-    if (errorcode < 0 && !print_error_message(errorcode, "", "\n"))
+-      return PR_ABEND;
+-    return PR_SKIP;
+-    }
++  fprintf(outfile, "Callout enumerate failed: error %d: ", rc);
++  if (rc < 0 && !print_error_message(rc, "", "\n"))
++    return PR_ABEND;
++  return PR_SKIP;
+   }
+ return PR_OK;
+@@ -5230,13 +5246,9 @@ switch(cmd)
+     {
+     PCRE2_JIT_COMPILE(jitrc, compiled_code, pat_patctl.jit);
+     }
+-  if ((pat_patctl.control & CTL_MEMORY) != 0) show_memory_info();
+-  if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) show_framesize();
+-  if ((pat_patctl.control & CTL_ANYINFO) != 0)
+-    {
+-    rc = show_pattern_info();
+-    if (rc != PR_OK) return rc;
+-    }
++
++  rc = show_pattern_info();
++  if (rc != PR_OK) return rc;
+   break;
+   /* Save the stack of compiled patterns to a file, then empty the stack. */
+@@ -5395,7 +5407,7 @@ BOOL utf;
+ uint32_t k;
+ uint8_t *p = buffer;
+ unsigned int delimiter = *p++;
+-int errorcode;
++int rc, errorcode;
+ void *use_pat_context;
+ void *use_pbuffer = NULL;
+ uint32_t use_forbid_utf = forbid_utf;
+@@ -5724,7 +5736,6 @@ local character tables. Neither does it have 16-bit or 32-bit support. */
+ if ((pat_patctl.control & CTL_POSIX) != 0)
+   {
+ #ifdef SUPPORT_PCRE2_8
+-  int rc;
+   int cflags = 0;
+   const char *msg = "** Ignored with POSIX interface:";
+ #endif
+@@ -5931,7 +5942,6 @@ ends up back in the usual place. */
+ if (pat_patctl.convert_type != CONVERT_UNSET)
+   {
+-  int rc;
+   int convert_return = PR_OK;
+   uint32_t convert_options = pat_patctl.convert_type;
+   void *converted_pattern;
+@@ -6246,13 +6256,8 @@ if ((pat_patctl.control2 & CTL2_NL_SET) != 0)
+ /* Output code size and other information if requested. */
+-if ((pat_patctl.control & CTL_MEMORY) != 0) show_memory_info();
+-if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) show_framesize();
+-if ((pat_patctl.control & CTL_ANYINFO) != 0)
+-  {
+-  int rc = show_pattern_info();
+-  if (rc != PR_OK) return rc;
+-  }
++rc = show_pattern_info();
++if (rc != PR_OK) return rc;
+ /* The "push" control requests that the compiled pattern be remembered on a
+ stack. This is mainly for testing the serialization functionality. */
+-- 
+2.51.2.vfs.0.0
+
index 9639a907fd335c1ab87db65e60b70f91b6ed7f28..f85e12f82b3f2ef1d30b8d56539532af70d7b27e 100644 (file)
@@ -23,8 +23,8 @@ fi
 usage="Usage: pcre2-config [--prefix] [--exec-prefix] [--version] $libs $cflags"
 
 if test $# -eq 0; then
-      echo "${usage}" 1>&2
-      exit 1
+  echo "${usage}" 1>&2
+  exit 1
 fi
 
 libR=
@@ -38,9 +38,19 @@ case `uname -s` in
 esac
 
 libS=
-if test @libdir@ != /usr/lib ; then
-  libS=-L@libdir@
-fi
+case "@libdir@" in
+  # system locations on Linux, no -L needed
+  /usr/lib|/usr/lib32|/usr/lib64|/usr/lib/*-gnu*)
+  ;;
+  /lib|/lib32|/lib64|/lib/*-gnu*)
+  ;;
+  # system locations on AIX and Solaris, no -L needed
+  /usr/lib/64|/usr/lib/amd*|/usr/lib/sparc*|/usr/lib/ppc*)
+  ;;
+  *)
+  libS="-L@libdir@"
+  ;;
+esac
 
 while test $# -gt 0; do
   case "$1" in
index bcc62c0464b92d5708e2e235247d2397999f61fc..fb994d8284d11e8d3c881c3a4f94c0344acc5042 100644 (file)
@@ -13,6 +13,7 @@
 
 #cmakedefine HAVE_MEMFD_CREATE 1
 #cmakedefine HAVE_SECURE_GETENV 1
+#cmakedefine HAVE_SETRLIMIT 1
 
 #cmakedefine SUPPORT_PCRE2_8 1
 #cmakedefine SUPPORT_PCRE2_16 1
index 48da31e1b23ed6ec00666699257b6732224618ed..5380525b4fd38c449af8f7352581da6e4ba612bf 100644 (file)
@@ -119,6 +119,9 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */
 /* Define to 1 if you have the `secure_getenv' function. */
 /* #undef HAVE_SECURE_GETENV */
 
+/* Define to 1 if you have the `setrlimit' function. */
+/* #undef HAVE_SETRLIMIT */
+
 /* Define to 1 if you have the <stdint.h> header file. */
 /* #undef HAVE_STDINT_H */
 
@@ -247,7 +250,7 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */
 #define PACKAGE_NAME "PCRE2"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PCRE2 10.47"
+#define PACKAGE_STRING "PCRE2 10.48-RC1"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "pcre2"
@@ -256,7 +259,7 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "10.47"
+#define PACKAGE_VERSION "10.48-RC1"
 
 /* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
    parentheses (of any kind) in a pattern. This limits the amount of system
@@ -475,7 +478,7 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */
 #endif
 
 /* Version number of package */
-#define VERSION "10.47"
+#define VERSION "10.48-RC1"
 
 /* Number of bits in a file offset, on hosts where this is settable. */
 /* #undef _FILE_OFFSET_BITS */
index 0f2ef38342425ce8f7c7b3704571eeebd3380399..1ddb4c65bc1b8d2b33f25c7769db1006fb307d3c 100644 (file)
@@ -119,6 +119,9 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */
 /* Define to 1 if you have the `secure_getenv' function. */
 #undef HAVE_SECURE_GETENV
 
+/* Define to 1 if you have the `setrlimit' function. */
+#undef HAVE_SETRLIMIT
+
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
diff --git a/src/libpcre2-16.sym b/src/libpcre2-16.sym
deleted file mode 100644 (file)
index fd5257d..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# First version of PCRE2 in which symbols were assigned versions.
-PCRE2_10.47 {
-  global:
-    pcre2_callout_enumerate_16;
-    pcre2_code_copy_16;
-    pcre2_code_copy_with_tables_16;
-    pcre2_code_free_16;
-    pcre2_compile_16;
-    pcre2_compile_context_copy_16;
-    pcre2_compile_context_create_16;
-    pcre2_compile_context_free_16;
-    pcre2_config_16;
-    pcre2_convert_context_copy_16;
-    pcre2_convert_context_create_16;
-    pcre2_convert_context_free_16;
-    pcre2_converted_pattern_free_16;
-    pcre2_dfa_match_16;
-    pcre2_general_context_copy_16;
-    pcre2_general_context_create_16;
-    pcre2_general_context_free_16;
-    pcre2_get_error_message_16;
-    pcre2_get_mark_16;
-    pcre2_get_match_data_heapframes_size_16;
-    pcre2_get_match_data_size_16;
-    pcre2_get_ovector_count_16;
-    pcre2_get_ovector_pointer_16;
-    pcre2_get_startchar_16;
-    pcre2_jit_compile_16;
-    pcre2_jit_free_unused_memory_16;
-    pcre2_jit_match_16;
-    pcre2_jit_stack_assign_16;
-    pcre2_jit_stack_create_16;
-    pcre2_jit_stack_free_16;
-    pcre2_maketables_16;
-    pcre2_maketables_free_16;
-    pcre2_match_16;
-    pcre2_match_context_copy_16;
-    pcre2_match_context_create_16;
-    pcre2_match_context_free_16;
-    pcre2_match_data_create_16;
-    pcre2_match_data_create_from_pattern_16;
-    pcre2_match_data_free_16;
-    pcre2_next_match_16;
-    pcre2_pattern_convert_16;
-    pcre2_pattern_info_16;
-    pcre2_serialize_decode_16;
-    pcre2_serialize_encode_16;
-    pcre2_serialize_free_16;
-    pcre2_serialize_get_number_of_codes_16;
-    pcre2_set_bsr_16;
-    pcre2_set_callout_16;
-    pcre2_set_character_tables_16;
-    pcre2_set_compile_extra_options_16;
-    pcre2_set_compile_recursion_guard_16;
-    pcre2_set_depth_limit_16;
-    pcre2_set_glob_escape_16;
-    pcre2_set_glob_separator_16;
-    pcre2_set_heap_limit_16;
-    pcre2_set_match_limit_16;
-    pcre2_set_max_pattern_compiled_length_16;
-    pcre2_set_max_pattern_length_16;
-    pcre2_set_max_varlookbehind_16;
-    pcre2_set_newline_16;
-    pcre2_set_offset_limit_16;
-    pcre2_set_optimize_16;
-    pcre2_set_parens_nest_limit_16;
-    pcre2_set_recursion_limit_16;
-    pcre2_set_recursion_memory_management_16;
-    pcre2_set_substitute_callout_16;
-    pcre2_set_substitute_case_callout_16;
-    pcre2_substitute_16;
-    pcre2_substring_copy_byname_16;
-    pcre2_substring_copy_bynumber_16;
-    pcre2_substring_free_16;
-    pcre2_substring_get_byname_16;
-    pcre2_substring_get_bynumber_16;
-    pcre2_substring_length_byname_16;
-    pcre2_substring_length_bynumber_16;
-    pcre2_substring_list_free_16;
-    pcre2_substring_list_get_16;
-    pcre2_substring_nametable_scan_16;
-    pcre2_substring_number_from_name_16;
-  local:
-    _fini;
-    _init;
-};
-
-# PCRE2_10.48 {} PCRE2_10.47;
diff --git a/src/libpcre2-16.sym.in b/src/libpcre2-16.sym.in
new file mode 100644 (file)
index 0000000..e345f96
--- /dev/null
@@ -0,0 +1,87 @@
+# First version of PCRE2 in which symbols were assigned versions.
+PCRE2_10.47 {
+  global:
+    pcre2_callout_enumerate_16;
+    pcre2_code_copy_16;
+    pcre2_code_copy_with_tables_16;
+    pcre2_code_free_16;
+    pcre2_compile_16;
+    pcre2_compile_context_copy_16;
+    pcre2_compile_context_create_16;
+    pcre2_compile_context_free_16;
+    pcre2_config_16;
+    pcre2_convert_context_copy_16;
+    pcre2_convert_context_create_16;
+    pcre2_convert_context_free_16;
+    pcre2_converted_pattern_free_16;
+    pcre2_dfa_match_16;
+    pcre2_general_context_copy_16;
+    pcre2_general_context_create_16;
+    pcre2_general_context_free_16;
+    pcre2_get_error_message_16;
+    pcre2_get_mark_16;
+    pcre2_get_match_data_heapframes_size_16;
+    pcre2_get_match_data_size_16;
+    pcre2_get_ovector_count_16;
+    pcre2_get_ovector_pointer_16;
+    pcre2_get_startchar_16;
+    pcre2_jit_compile_16;
+    pcre2_jit_free_unused_memory_16;
+    pcre2_jit_match_16;
+    pcre2_jit_stack_assign_16;
+    pcre2_jit_stack_create_16;
+    pcre2_jit_stack_free_16;
+    pcre2_maketables_16;
+    pcre2_maketables_free_16;
+    pcre2_match_16;
+    pcre2_match_context_copy_16;
+    pcre2_match_context_create_16;
+    pcre2_match_context_free_16;
+    pcre2_match_data_create_16;
+    pcre2_match_data_create_from_pattern_16;
+    pcre2_match_data_free_16;
+    pcre2_next_match_16;
+    pcre2_pattern_convert_16;
+    pcre2_pattern_info_16;
+    pcre2_serialize_decode_16;
+    pcre2_serialize_encode_16;
+    pcre2_serialize_free_16;
+    pcre2_serialize_get_number_of_codes_16;
+    pcre2_set_bsr_16;
+    pcre2_set_callout_16;
+    pcre2_set_character_tables_16;
+    pcre2_set_compile_extra_options_16;
+    pcre2_set_compile_recursion_guard_16;
+    pcre2_set_depth_limit_16;
+    pcre2_set_glob_escape_16;
+    pcre2_set_glob_separator_16;
+    pcre2_set_heap_limit_16;
+    pcre2_set_match_limit_16;
+    pcre2_set_max_pattern_compiled_length_16;
+    pcre2_set_max_pattern_length_16;
+    pcre2_set_max_varlookbehind_16;
+    pcre2_set_newline_16;
+    pcre2_set_offset_limit_16;
+    pcre2_set_optimize_16;
+    pcre2_set_parens_nest_limit_16;
+    pcre2_set_recursion_limit_16;
+    pcre2_set_recursion_memory_management_16;
+    pcre2_set_substitute_callout_16;
+    pcre2_set_substitute_case_callout_16;
+    pcre2_substitute_16;
+    pcre2_substring_copy_byname_16;
+    pcre2_substring_copy_bynumber_16;
+    pcre2_substring_free_16;
+    pcre2_substring_get_byname_16;
+    pcre2_substring_get_bynumber_16;
+    pcre2_substring_length_byname_16;
+    pcre2_substring_length_bynumber_16;
+    pcre2_substring_list_free_16;
+    pcre2_substring_list_get_16;
+    pcre2_substring_nametable_scan_16;
+    pcre2_substring_number_from_name_16;
+
+@PCRE2_EXTRA_LOCAL_SYMS@
+};
+
+PCRE2_10.48 { } PCRE2_10.47;
diff --git a/src/libpcre2-32.sym b/src/libpcre2-32.sym
deleted file mode 100644 (file)
index d4606c2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# First version of PCRE2 in which symbols were assigned versions.
-PCRE2_10.47 {
-  global:
-    pcre2_callout_enumerate_32;
-    pcre2_code_copy_32;
-    pcre2_code_copy_with_tables_32;
-    pcre2_code_free_32;
-    pcre2_compile_32;
-    pcre2_compile_context_copy_32;
-    pcre2_compile_context_create_32;
-    pcre2_compile_context_free_32;
-    pcre2_config_32;
-    pcre2_convert_context_copy_32;
-    pcre2_convert_context_create_32;
-    pcre2_convert_context_free_32;
-    pcre2_converted_pattern_free_32;
-    pcre2_dfa_match_32;
-    pcre2_general_context_copy_32;
-    pcre2_general_context_create_32;
-    pcre2_general_context_free_32;
-    pcre2_get_error_message_32;
-    pcre2_get_mark_32;
-    pcre2_get_match_data_heapframes_size_32;
-    pcre2_get_match_data_size_32;
-    pcre2_get_ovector_count_32;
-    pcre2_get_ovector_pointer_32;
-    pcre2_get_startchar_32;
-    pcre2_jit_compile_32;
-    pcre2_jit_free_unused_memory_32;
-    pcre2_jit_match_32;
-    pcre2_jit_stack_assign_32;
-    pcre2_jit_stack_create_32;
-    pcre2_jit_stack_free_32;
-    pcre2_maketables_32;
-    pcre2_maketables_free_32;
-    pcre2_match_32;
-    pcre2_match_context_copy_32;
-    pcre2_match_context_create_32;
-    pcre2_match_context_free_32;
-    pcre2_match_data_create_32;
-    pcre2_match_data_create_from_pattern_32;
-    pcre2_match_data_free_32;
-    pcre2_next_match_32;
-    pcre2_pattern_convert_32;
-    pcre2_pattern_info_32;
-    pcre2_serialize_decode_32;
-    pcre2_serialize_encode_32;
-    pcre2_serialize_free_32;
-    pcre2_serialize_get_number_of_codes_32;
-    pcre2_set_bsr_32;
-    pcre2_set_callout_32;
-    pcre2_set_character_tables_32;
-    pcre2_set_compile_extra_options_32;
-    pcre2_set_compile_recursion_guard_32;
-    pcre2_set_depth_limit_32;
-    pcre2_set_glob_escape_32;
-    pcre2_set_glob_separator_32;
-    pcre2_set_heap_limit_32;
-    pcre2_set_match_limit_32;
-    pcre2_set_max_pattern_compiled_length_32;
-    pcre2_set_max_pattern_length_32;
-    pcre2_set_max_varlookbehind_32;
-    pcre2_set_newline_32;
-    pcre2_set_offset_limit_32;
-    pcre2_set_optimize_32;
-    pcre2_set_parens_nest_limit_32;
-    pcre2_set_recursion_limit_32;
-    pcre2_set_recursion_memory_management_32;
-    pcre2_set_substitute_callout_32;
-    pcre2_set_substitute_case_callout_32;
-    pcre2_substitute_32;
-    pcre2_substring_copy_byname_32;
-    pcre2_substring_copy_bynumber_32;
-    pcre2_substring_free_32;
-    pcre2_substring_get_byname_32;
-    pcre2_substring_get_bynumber_32;
-    pcre2_substring_length_byname_32;
-    pcre2_substring_length_bynumber_32;
-    pcre2_substring_list_free_32;
-    pcre2_substring_list_get_32;
-    pcre2_substring_nametable_scan_32;
-    pcre2_substring_number_from_name_32;
-  local:
-    _fini;
-    _init;
-};
-
-# PCRE2_10.48 {} PCRE2_10.47;
diff --git a/src/libpcre2-32.sym.in b/src/libpcre2-32.sym.in
new file mode 100644 (file)
index 0000000..5a9f2c9
--- /dev/null
@@ -0,0 +1,87 @@
+# First version of PCRE2 in which symbols were assigned versions.
+PCRE2_10.47 {
+  global:
+    pcre2_callout_enumerate_32;
+    pcre2_code_copy_32;
+    pcre2_code_copy_with_tables_32;
+    pcre2_code_free_32;
+    pcre2_compile_32;
+    pcre2_compile_context_copy_32;
+    pcre2_compile_context_create_32;
+    pcre2_compile_context_free_32;
+    pcre2_config_32;
+    pcre2_convert_context_copy_32;
+    pcre2_convert_context_create_32;
+    pcre2_convert_context_free_32;
+    pcre2_converted_pattern_free_32;
+    pcre2_dfa_match_32;
+    pcre2_general_context_copy_32;
+    pcre2_general_context_create_32;
+    pcre2_general_context_free_32;
+    pcre2_get_error_message_32;
+    pcre2_get_mark_32;
+    pcre2_get_match_data_heapframes_size_32;
+    pcre2_get_match_data_size_32;
+    pcre2_get_ovector_count_32;
+    pcre2_get_ovector_pointer_32;
+    pcre2_get_startchar_32;
+    pcre2_jit_compile_32;
+    pcre2_jit_free_unused_memory_32;
+    pcre2_jit_match_32;
+    pcre2_jit_stack_assign_32;
+    pcre2_jit_stack_create_32;
+    pcre2_jit_stack_free_32;
+    pcre2_maketables_32;
+    pcre2_maketables_free_32;
+    pcre2_match_32;
+    pcre2_match_context_copy_32;
+    pcre2_match_context_create_32;
+    pcre2_match_context_free_32;
+    pcre2_match_data_create_32;
+    pcre2_match_data_create_from_pattern_32;
+    pcre2_match_data_free_32;
+    pcre2_next_match_32;
+    pcre2_pattern_convert_32;
+    pcre2_pattern_info_32;
+    pcre2_serialize_decode_32;
+    pcre2_serialize_encode_32;
+    pcre2_serialize_free_32;
+    pcre2_serialize_get_number_of_codes_32;
+    pcre2_set_bsr_32;
+    pcre2_set_callout_32;
+    pcre2_set_character_tables_32;
+    pcre2_set_compile_extra_options_32;
+    pcre2_set_compile_recursion_guard_32;
+    pcre2_set_depth_limit_32;
+    pcre2_set_glob_escape_32;
+    pcre2_set_glob_separator_32;
+    pcre2_set_heap_limit_32;
+    pcre2_set_match_limit_32;
+    pcre2_set_max_pattern_compiled_length_32;
+    pcre2_set_max_pattern_length_32;
+    pcre2_set_max_varlookbehind_32;
+    pcre2_set_newline_32;
+    pcre2_set_offset_limit_32;
+    pcre2_set_optimize_32;
+    pcre2_set_parens_nest_limit_32;
+    pcre2_set_recursion_limit_32;
+    pcre2_set_recursion_memory_management_32;
+    pcre2_set_substitute_callout_32;
+    pcre2_set_substitute_case_callout_32;
+    pcre2_substitute_32;
+    pcre2_substring_copy_byname_32;
+    pcre2_substring_copy_bynumber_32;
+    pcre2_substring_free_32;
+    pcre2_substring_get_byname_32;
+    pcre2_substring_get_bynumber_32;
+    pcre2_substring_length_byname_32;
+    pcre2_substring_length_bynumber_32;
+    pcre2_substring_list_free_32;
+    pcre2_substring_list_get_32;
+    pcre2_substring_nametable_scan_32;
+    pcre2_substring_number_from_name_32;
+
+@PCRE2_EXTRA_LOCAL_SYMS@
+};
+
+PCRE2_10.48 { } PCRE2_10.47;
diff --git a/src/libpcre2-8.sym b/src/libpcre2-8.sym
deleted file mode 100644 (file)
index 368b4e4..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# First version of PCRE2 in which symbols were assigned versions.
-PCRE2_10.47 {
-  global:
-    pcre2_callout_enumerate_8;
-    pcre2_code_copy_8;
-    pcre2_code_copy_with_tables_8;
-    pcre2_code_free_8;
-    pcre2_compile_8;
-    pcre2_compile_context_copy_8;
-    pcre2_compile_context_create_8;
-    pcre2_compile_context_free_8;
-    pcre2_config_8;
-    pcre2_convert_context_copy_8;
-    pcre2_convert_context_create_8;
-    pcre2_convert_context_free_8;
-    pcre2_converted_pattern_free_8;
-    pcre2_dfa_match_8;
-    pcre2_general_context_copy_8;
-    pcre2_general_context_create_8;
-    pcre2_general_context_free_8;
-    pcre2_get_error_message_8;
-    pcre2_get_mark_8;
-    pcre2_get_match_data_heapframes_size_8;
-    pcre2_get_match_data_size_8;
-    pcre2_get_ovector_count_8;
-    pcre2_get_ovector_pointer_8;
-    pcre2_get_startchar_8;
-    pcre2_jit_compile_8;
-    pcre2_jit_free_unused_memory_8;
-    pcre2_jit_match_8;
-    pcre2_jit_stack_assign_8;
-    pcre2_jit_stack_create_8;
-    pcre2_jit_stack_free_8;
-    pcre2_maketables_8;
-    pcre2_maketables_free_8;
-    pcre2_match_8;
-    pcre2_match_context_copy_8;
-    pcre2_match_context_create_8;
-    pcre2_match_context_free_8;
-    pcre2_match_data_create_8;
-    pcre2_match_data_create_from_pattern_8;
-    pcre2_match_data_free_8;
-    pcre2_next_match_8;
-    pcre2_pattern_convert_8;
-    pcre2_pattern_info_8;
-    pcre2_serialize_decode_8;
-    pcre2_serialize_encode_8;
-    pcre2_serialize_free_8;
-    pcre2_serialize_get_number_of_codes_8;
-    pcre2_set_bsr_8;
-    pcre2_set_callout_8;
-    pcre2_set_character_tables_8;
-    pcre2_set_compile_extra_options_8;
-    pcre2_set_compile_recursion_guard_8;
-    pcre2_set_depth_limit_8;
-    pcre2_set_glob_escape_8;
-    pcre2_set_glob_separator_8;
-    pcre2_set_heap_limit_8;
-    pcre2_set_match_limit_8;
-    pcre2_set_max_pattern_compiled_length_8;
-    pcre2_set_max_pattern_length_8;
-    pcre2_set_max_varlookbehind_8;
-    pcre2_set_newline_8;
-    pcre2_set_offset_limit_8;
-    pcre2_set_optimize_8;
-    pcre2_set_parens_nest_limit_8;
-    pcre2_set_recursion_limit_8;
-    pcre2_set_recursion_memory_management_8;
-    pcre2_set_substitute_callout_8;
-    pcre2_set_substitute_case_callout_8;
-    pcre2_substitute_8;
-    pcre2_substring_copy_byname_8;
-    pcre2_substring_copy_bynumber_8;
-    pcre2_substring_free_8;
-    pcre2_substring_get_byname_8;
-    pcre2_substring_get_bynumber_8;
-    pcre2_substring_length_byname_8;
-    pcre2_substring_length_bynumber_8;
-    pcre2_substring_list_free_8;
-    pcre2_substring_list_get_8;
-    pcre2_substring_nametable_scan_8;
-    pcre2_substring_number_from_name_8;
-  local:
-    _fini;
-    _init;
-};
-
-# PCRE2_10.48 {} PCRE2_10.47;
diff --git a/src/libpcre2-8.sym.in b/src/libpcre2-8.sym.in
new file mode 100644 (file)
index 0000000..ac30042
--- /dev/null
@@ -0,0 +1,87 @@
+# First version of PCRE2 in which symbols were assigned versions.
+PCRE2_10.47 {
+  global:
+    pcre2_callout_enumerate_8;
+    pcre2_code_copy_8;
+    pcre2_code_copy_with_tables_8;
+    pcre2_code_free_8;
+    pcre2_compile_8;
+    pcre2_compile_context_copy_8;
+    pcre2_compile_context_create_8;
+    pcre2_compile_context_free_8;
+    pcre2_config_8;
+    pcre2_convert_context_copy_8;
+    pcre2_convert_context_create_8;
+    pcre2_convert_context_free_8;
+    pcre2_converted_pattern_free_8;
+    pcre2_dfa_match_8;
+    pcre2_general_context_copy_8;
+    pcre2_general_context_create_8;
+    pcre2_general_context_free_8;
+    pcre2_get_error_message_8;
+    pcre2_get_mark_8;
+    pcre2_get_match_data_heapframes_size_8;
+    pcre2_get_match_data_size_8;
+    pcre2_get_ovector_count_8;
+    pcre2_get_ovector_pointer_8;
+    pcre2_get_startchar_8;
+    pcre2_jit_compile_8;
+    pcre2_jit_free_unused_memory_8;
+    pcre2_jit_match_8;
+    pcre2_jit_stack_assign_8;
+    pcre2_jit_stack_create_8;
+    pcre2_jit_stack_free_8;
+    pcre2_maketables_8;
+    pcre2_maketables_free_8;
+    pcre2_match_8;
+    pcre2_match_context_copy_8;
+    pcre2_match_context_create_8;
+    pcre2_match_context_free_8;
+    pcre2_match_data_create_8;
+    pcre2_match_data_create_from_pattern_8;
+    pcre2_match_data_free_8;
+    pcre2_next_match_8;
+    pcre2_pattern_convert_8;
+    pcre2_pattern_info_8;
+    pcre2_serialize_decode_8;
+    pcre2_serialize_encode_8;
+    pcre2_serialize_free_8;
+    pcre2_serialize_get_number_of_codes_8;
+    pcre2_set_bsr_8;
+    pcre2_set_callout_8;
+    pcre2_set_character_tables_8;
+    pcre2_set_compile_extra_options_8;
+    pcre2_set_compile_recursion_guard_8;
+    pcre2_set_depth_limit_8;
+    pcre2_set_glob_escape_8;
+    pcre2_set_glob_separator_8;
+    pcre2_set_heap_limit_8;
+    pcre2_set_match_limit_8;
+    pcre2_set_max_pattern_compiled_length_8;
+    pcre2_set_max_pattern_length_8;
+    pcre2_set_max_varlookbehind_8;
+    pcre2_set_newline_8;
+    pcre2_set_offset_limit_8;
+    pcre2_set_optimize_8;
+    pcre2_set_parens_nest_limit_8;
+    pcre2_set_recursion_limit_8;
+    pcre2_set_recursion_memory_management_8;
+    pcre2_set_substitute_callout_8;
+    pcre2_set_substitute_case_callout_8;
+    pcre2_substitute_8;
+    pcre2_substring_copy_byname_8;
+    pcre2_substring_copy_bynumber_8;
+    pcre2_substring_free_8;
+    pcre2_substring_get_byname_8;
+    pcre2_substring_get_bynumber_8;
+    pcre2_substring_length_byname_8;
+    pcre2_substring_length_bynumber_8;
+    pcre2_substring_list_free_8;
+    pcre2_substring_list_get_8;
+    pcre2_substring_nametable_scan_8;
+    pcre2_substring_number_from_name_8;
+
+@PCRE2_EXTRA_LOCAL_SYMS@
+};
+
+PCRE2_10.48 { } PCRE2_10.47;
diff --git a/src/libpcre2-posix.sym b/src/libpcre2-posix.sym
deleted file mode 100644 (file)
index 04a56cf..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# First version of PCRE2 in which symbols were assigned versions.
-PCRE2_10.47 {
-  global:
-    pcre2_regcomp;
-    pcre2_regerror;
-    pcre2_regexec;
-    pcre2_regfree;
-  local:
-    _fini;
-    _init;
-};
-
-# PCRE2_10.48 {} PCRE2_10.47;
diff --git a/src/libpcre2-posix.sym.in b/src/libpcre2-posix.sym.in
new file mode 100644 (file)
index 0000000..ee31d01
--- /dev/null
@@ -0,0 +1,12 @@
+# First version of PCRE2 in which symbols were assigned versions.
+PCRE2_10.47 {
+  global:
+    pcre2_regcomp;
+    pcre2_regerror;
+    pcre2_regexec;
+    pcre2_regfree;
+
+@PCRE2_EXTRA_LOCAL_SYMS@
+};
+
+PCRE2_10.48 { } PCRE2_10.47;
index 4034e5a91d44a86434e0e635032ccfee44a06bb8..283d61a3b94646a31839431228f03896038a6a2f 100644 (file)
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
 /* The current PCRE version information. */
 
 #define PCRE2_MAJOR           10
-#define PCRE2_MINOR           47
-#define PCRE2_PRERELEASE      
-#define PCRE2_DATE            2025-10-21
+#define PCRE2_MINOR           48
+#define PCRE2_PRERELEASE      -RC1
+#define PCRE2_DATE            2026-08-27
 
 /* When an application links to a PCRE2 DLL in Windows, the symbols that are
 imported have to be identified as such. When building PCRE2, the appropriate
@@ -438,6 +438,7 @@ released, the numbers must not be changed. */
 #define PCRE2_ERROR_DIFFSUBSOFFSET    (-73)
 #define PCRE2_ERROR_DIFFSUBSOPTIONS   (-74)
 #define PCRE2_ERROR_BAD_BACKSLASH_K   (-75)
+#define PCRE2_ERROR_PARTIALSUBS       (-76)
 
 
 /* Request types for pcre2_pattern_info() */
index 0dffe65fba7fa5e012bae625ddf3690d35a45ef8..06bcfad7d6ebb81326ce3e6b37075a8eb50a9d93 100644 (file)
@@ -438,6 +438,7 @@ released, the numbers must not be changed. */
 #define PCRE2_ERROR_DIFFSUBSOFFSET    (-73)
 #define PCRE2_ERROR_DIFFSUBSOPTIONS   (-74)
 #define PCRE2_ERROR_BAD_BACKSLASH_K   (-75)
+#define PCRE2_ERROR_PARTIALSUBS       (-76)
 
 
 /* Request types for pcre2_pattern_info() */
index f126e41b7b07c89ee6376312dfd869582d2b5d9b..1081cf647e39cb17bf6b37da21a06384ad20f0dd 100644 (file)
@@ -2020,7 +2020,7 @@ else
     else
       {
       *errorcodeptr = ERR64;
-      goto ESCAPE_FAILED_FORWARD;
+      if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD;
       }
     break;
 
@@ -2107,7 +2107,7 @@ else
         else
           {
           *errorcodeptr = ERR67;
-          goto ESCAPE_FAILED_FORWARD;
+          if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD;
           }
         }   /* End of \x{} processing */
 
@@ -8066,6 +8066,13 @@ for (;; pptr++)
         tempcode += GET(tempcode, 1);
         break;
 #endif
+
+        case OP_REF:
+        case OP_REFI:
+        case OP_DNREF:
+        case OP_DNREFI:
+        tempcode += PRIV(OP_lengths)[*tempcode];
+        break;
         }
 
       /* If tempcode is equal to code (which points to the end of the repeated
@@ -9363,10 +9370,10 @@ return c;
 
 /* This function is called to skip parts of the parsed pattern when finding the
 length of a lookbehind branch. It is called after (*ACCEPT) and (*FAIL) to find
-the end of the branch, it is called to skip over an internal lookaround or
-(DEFINE) group, and it is also called to skip to the end of a class, during
-which it will never encounter nested groups (but there's no need to have
-special code for that).
+the end of the branch; it is called to skip over an internal lookaround or
+(DEFINE) group; and it is also called to skip to the end of a class, during
+which it will never encounter nested groups (however extended classes can
+themselves be nested, with their own class-nesting level).
 
 When called to find the end of a branch or group, pptr must point to the first
 meta code inside the branch, not the branch-starting code. In other cases it
@@ -9387,6 +9394,7 @@ static uint32_t *
 parsed_skip(uint32_t *pptr, uint32_t skiptype)
 {
 uint32_t nestlevel = 0;
+uint32_t class_nestlevel = 0;
 
 for (;; pptr++)
   {
@@ -9426,12 +9434,19 @@ for (;; pptr++)
     pptr += pptr[1];
     break;
 
-    /* These are the "active" items in this loop. */
+    /* These are the active items for tracking class nesting. */
+
+    case META_CLASS:
+    case META_CLASS_NOT:
+    if (skiptype == PSKIP_CLASS) class_nestlevel++;
+    break;
 
     case META_CLASS_END:
-    if (skiptype == PSKIP_CLASS) return pptr;
+    if (skiptype == PSKIP_CLASS && --class_nestlevel == 0) return pptr;
     break;
 
+    /* These are the "active" items for tracking ALT/KET nesting. */
+
     case META_ATOMIC:
     case META_CAPTURE:
     case META_COND_ASSERT:
@@ -10160,6 +10175,11 @@ for (; *pptr != META_END; pptr++)
     case META_COMMIT:
     case META_DOLLAR:
     case META_DOT:
+    case META_ECLASS_AND:
+    case META_ECLASS_NOT:
+    case META_ECLASS_OR:
+    case META_ECLASS_SUB:
+    case META_ECLASS_XOR:
     case META_FAIL:
     case META_PLUS:
     case META_PLUS_PLUS:
index 9a1fc022fff4d89837809f5e7338df837a316c7e..c6f30d6fcf56b33efbbab2e493ffe26ce9b07385 100644 (file)
@@ -721,9 +721,13 @@ while (TRUE)
   else
     cranges->char_lists_types |= tmp1 << tmp2;
 
-  if (range_start < XCL_CHAR_LIST_LOW_16_START) break;
+  if (range_end < XCL_CHAR_LIST_LOW_16_START || tmp2 == 0)
+    {
+    PCRE2_ASSERT(range_start < XCL_CHAR_LIST_LOW_16_START);
+    break;
+    }
 
-  PCRE2_ASSERT(tmp2 >= XCL_TYPE_BIT_LEN);
+  PCRE2_ASSERT((tmp2 % XCL_TYPE_BIT_LEN) == 0);
   char_list_end = char_list_start - 1;
   char_list_start = *char_list_next++;
   tmp1 = 0;
@@ -1802,17 +1806,14 @@ if ((xclass_props & XCLASS_REQUIRED) != 0)
       PUT(code, 0, (uint32_t)(char_lists_size >> 1));
       code += LINK_SIZE;
 
-#if defined PCRE2_DEBUG || defined SUPPORT_VALGRIND
+      /* If we added padding to align the list, initialize the bytes to
+      defined values, so the library is valgrind-clean. It could also
+      be a security concern for clients calling into PCRE2 via bindings
+      from a memory-safe language, if pcre2_serialize_encode() exposes
+      uninitialized memory that may contain sensitive information. */
+
       if ((char_lists_size & 0x2) != 0)
-        {
-        /* In debug the unused 16 bit value is set
-        to a fixed value and marked unused. */
-        ((uint16_t*)data)[-1] = 0x5555;
-#ifdef SUPPORT_VALGRIND
-        VALGRIND_MAKE_MEM_NOACCESS(data - 2, 2);
-#endif
-        }
-#endif
+        ((uint16_t*)data)[-1] = 0xdead;
 
       cb->char_lists_size =
         CLIST_ALIGN_TO(char_lists_size, sizeof(uint32_t));
index ad7312ab7bdbcdded2482186491c674138be85c6..8a2b293d5f732d59519041be17abed1ef2f157ce 100644 (file)
@@ -1215,9 +1215,11 @@ for (int i = 0; i < 2; i++)
   /* Allocate memory for the buffer, with hidden space for an allocator at
   the start. The next time round the loop runs the conversion for real. */
 
-  allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) +
-    (*bufflenptr + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)ccontext);
-  if (allocated == NULL)
+  if (*bufflenptr > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) /
+        CU2BYTES(1)) - 1 ||
+      (allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) +
+        CU2BYTES(*bufflenptr + 1),
+        (pcre2_memctl *)ccontext)) == NULL)
     {
     *bufflenptr = 0;  /* Error offset */
     return PCRE2_ERROR_NOMEMORY;
index f507acf8d5959ffcf4569665708e3662f894ccfd..314e97754e25f9629091d4aaaf4bc7625b32e5e3 100644 (file)
@@ -1601,7 +1601,7 @@ for (;;)
           goto ANYNL01;
 
           case CHAR_CR:
-          if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1;
+          if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
           /* Fall through */
 
           ANYNL01:
@@ -1879,7 +1879,7 @@ for (;;)
           goto ANYNL02;
 
           case CHAR_CR:
-          if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1;
+          if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
           /* Fall through */
 
           ANYNL02:
@@ -2160,7 +2160,7 @@ for (;;)
           goto ANYNL03;
 
           case CHAR_CR:
-          if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1;
+          if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
           /* Fall through */
 
           ANYNL03:
@@ -2341,7 +2341,7 @@ for (;;)
           if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0)
             reset_could_continue = TRUE;
           }
-        else if (UCHAR21TEST(ptr + 1) == CHAR_LF)
+        else if (ptr[1] == CHAR_LF)
           {
           ADD_NEW_DATA(-(state_offset + 1), 0, 1);
           }
@@ -3745,7 +3745,7 @@ for (;;)
         BOOL ok = start_match < end_subject;
         if (ok)
           {
-          PCRE2_UCHAR c = UCHAR21TEST(start_match);
+          PCRE2_UCHAR c = *start_match;
           ok = has_first_cu && (c == first_cu || c == first_cu2);
           if (!ok && start_bits != NULL)
             {
@@ -3773,7 +3773,7 @@ for (;;)
 #if PCRE2_CODE_UNIT_WIDTH != 8
           PCRE2_UCHAR smc;
           while (start_match < end_subject &&
-                (smc = UCHAR21TEST(start_match)) != first_cu &&
+                (smc = *start_match) != first_cu &&
                  smc != first_cu2)
             start_match++;
 #else
@@ -3833,7 +3833,7 @@ for (;;)
         else
           {
 #if PCRE2_CODE_UNIT_WIDTH != 8
-          while (start_match < end_subject && UCHAR21TEST(start_match) !=
+          while (start_match < end_subject && *start_match !=
                  first_cu)
             start_match++;
 #else  /* 8-bit code units */
@@ -3885,7 +3885,7 @@ for (;;)
           if (start_match[-1] == CHAR_CR &&
                (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) &&
                start_match < end_subject &&
-               UCHAR21TEST(start_match) == CHAR_NL)
+               *start_match == CHAR_NL)
             start_match++;
           }
         }
@@ -3899,7 +3899,7 @@ for (;;)
         {
         while (start_match < end_subject)
           {
-          uint32_t c = UCHAR21TEST(start_match);
+          uint32_t c = *start_match;
 #if PCRE2_CODE_UNIT_WIDTH != 8
           if (c > 255) c = 255;
 #endif
@@ -3967,7 +3967,7 @@ for (;;)
 #if PCRE2_CODE_UNIT_WIDTH != 8
             while (p < end_subject)
               {
-              uint32_t pp = UCHAR21INCTEST(p);
+              uint32_t pp = *p++;
               if (pp == req_cu || pp == req_cu2) { p--; break; }
               }
 #else  /* 8-bit code units */
@@ -3988,7 +3988,7 @@ for (;;)
 #if PCRE2_CODE_UNIT_WIDTH != 8
             while (p < end_subject)
               {
-              if (UCHAR21INCTEST(p) == req_cu) { p--; break; }
+              if (*p++ == req_cu) { p--; break; }
               }
 
 #else  /* 8-bit code units */
@@ -4096,9 +4096,9 @@ for (;;)
   not contain any explicit matches for \r or \n, and the newline option is CRLF
   or ANY or ANYCRLF, advance the match position by one more character. */
 
-  if (UCHAR21TEST(start_match - 1) == CHAR_CR &&
+  if (start_match[-1] == CHAR_CR &&
       start_match < end_subject &&
-      UCHAR21TEST(start_match) == CHAR_NL &&
+      *start_match == CHAR_NL &&
       (re->flags & PCRE2_HASCRORLF) == 0 &&
         (mb->nltype == NLTYPE_ANY ||
          mb->nltype == NLTYPE_ANYCRLF ||
index df26add2be9ad1e86261557e4c274778493fac9c..46753f079b2eadbdb525ff64408b7acba1a7ccbb 100644 (file)
@@ -305,7 +305,9 @@ static const unsigned char match_error_texts[] =
   "substitute subject differs from prior match call\0"
   "substitute start offset differs from prior match call\0"
   "substitute options differ from prior match call\0"
+  /* 75 */
   "disallowed use of \\K in lookaround\0"
+  "replacement $' or $_ not supported with partial match\0"
   ;
 
 
index aa79409572e1ea15adfc11d88886e9ced5b1dfb6..930c745b401c134488382f54c533ae0383ee7842 100644 (file)
@@ -477,8 +477,8 @@ start/end of string field names are. */
        &(NLBLOCK->nllen), utf)) \
     : \
     ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \
-     UCHAR21TEST(p) == NLBLOCK->nl[0] && \
-     (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1])       \
+     *p == NLBLOCK->nl[0] && \
+     (NLBLOCK->nllen == 1 || p[1] == NLBLOCK->nl[1])       \
     ) \
   )
 
@@ -491,8 +491,8 @@ start/end of string field names are. */
        &(NLBLOCK->nllen), utf)) \
     : \
     ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \
-     UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] &&              \
-     (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \
+     *(p - NLBLOCK->nllen) == NLBLOCK->nl[0] &&              \
+     (NLBLOCK->nllen == 1 || *(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \
     ) \
   )
 
@@ -1518,7 +1518,7 @@ High16 and High32: the highest bit is always one
 The items are ordered in increasing order, so binary search can be
 used to find the lower bound of an input character. The lower bound
 is the highest item, which value is less or equal than the input
-character. If the lower bit of the item is cleard, or the character
+character. If the lower bit of the item is cleared, or the character
 stored in the item equals to the input character, the input
 character is in the character list. */
 
@@ -1539,14 +1539,19 @@ character is in the character list. */
 #define XCL_CHAR_LIST_HIGH_32_END 0xffffffff
 #define XCL_CHAR_LIST_HIGH_32_ADD 0x80000000
 
-/* Mask for getting the descriptors of character list ranges.
-Each descriptor has XCL_TYPE_BIT_LEN bits, and can be processed
-by XCL_BEGIN_WITH_RANGE and XCL_ITEM_COUNT_MASK macros. */
+/* Mask and length values for getting the descriptors of
+all character list ranges. The bit length of each descriptor
+is XCL_TYPE_BIT_LEN so the total size is 4*XCL_TYPE_BIT_LEN
+(currently 12 bit). This data is stored for all four character
+lists, even if no characters are present in a list. */
 #define XCL_TYPE_MASK 0xfff
 #define XCL_TYPE_BIT_LEN 3
-/* If this bit is set, the first item of the character list is the
-end of a range, which started before the starting character of the
-character list. */
+/* If this bit is set for a character class, the first item of the
+character list is the end of a range, which started before the
+starting character of the character list. If this bit is set, and
+no characters are present in the list, the whole character class
+is part of a range. E.g: [\x{500}-\x{12000}] covers the entire
+0x8000-0xffff range. */
 #define XCL_BEGIN_WITH_RANGE 0x4
 /* Number of items in the character list: 0, 1, or 2. The value 3
 represents that the item count is stored at the begining of the
@@ -2296,6 +2301,7 @@ is available. */
 #define _pcre2_is_newline            PCRE2_SUFFIX(_pcre2_is_newline_)
 #define _pcre2_jit_free_rodata       PCRE2_SUFFIX(_pcre2_jit_free_rodata_)
 #define _pcre2_jit_free              PCRE2_SUFFIX(_pcre2_jit_free_)
+#define _pcre2_jit_check_exec        PCRE2_SUFFIX(_pcre2_jit_check_exec_)
 #define _pcre2_jit_get_size          PCRE2_SUFFIX(_pcre2_jit_get_size_)
 #define _pcre2_jit_get_target        PCRE2_SUFFIX(_pcre2_jit_get_target_)
 #define _pcre2_memctl_malloc         PCRE2_SUFFIX(_pcre2_memctl_malloc_)
@@ -2325,6 +2331,7 @@ extern BOOL         _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR,
                       uint32_t *, BOOL);
 extern void         _pcre2_jit_free_rodata(void *, void *);
 extern void         _pcre2_jit_free(void *, pcre2_memctl *);
+extern BOOL         _pcre2_jit_check_exec(void *, uint32_t);
 extern size_t       _pcre2_jit_get_size(void *);
 const char *        _pcre2_jit_get_target(void);
 extern void *       _pcre2_memctl_malloc(size_t, pcre2_memctl *);
index 6cefb61d374e699137dd12eb98ffaa457b084405..269c418fe047399cfac6220eb99e2883e60c082a 100644 (file)
@@ -250,21 +250,6 @@ check is needed before accessing these tables. */
 
 /* ----------------- Character-handling macros ----------------- */
 
-/* There is a proposed future special "UTF-21" mode, in which only the lowest
-21 bits of a 32-bit character are interpreted as UTF, with the remaining 11
-high-order bits available to the application for other uses. In preparation for
-the future implementation of this mode, there are macros that load a data item
-and, if in this special mode, mask it to 21 bits. These macros all have names
-starting with UCHAR21. In all other modes, including the normal 32-bit
-library, the macros all have the same simple definitions. When the new mode is
-implemented, it is expected that these definitions will be varied appropriately
-using #ifdef when compiling the library that supports the special mode. */
-
-#define UCHAR21(eptr)        (*(eptr))
-#define UCHAR21TEST(eptr)    (*(eptr))
-#define UCHAR21INC(eptr)     (*(eptr)++)
-#define UCHAR21INCTEST(eptr) (*(eptr)++)
-
 /* When UTF encoding is being used, a character is no longer just a single
 byte in 8-bit mode or a single short in 16-bit mode. The macros for character
 handling generate simple sequences when used in the basic mode, and more
@@ -891,38 +876,125 @@ we don't generate any code when all is well. */
 typedef struct heapframe {
 
   /* The first set of fields are variables that have to be preserved over calls
-  to RRMATCH(), but which do not need to be copied to new frames. */
+  to RMATCH(), but which do not need to be copied to new frames. */
 
   PCRE2_SPTR ecode;          /* The current position in the pattern */
-  PCRE2_SPTR temp_sptr[2];   /* Used for short-term PCRE2_SPTR values */
-  PCRE2_SIZE length;         /* Used for character, string, or code lengths */
   PCRE2_SIZE back_frame;     /* Amount to subtract on RRETURN */
-  PCRE2_SIZE temp_size;      /* Used for short-term PCRE2_SIZE values */
   uint32_t rdepth;           /* Function "recursion" depth within pcre2_match() */
   uint32_t group_frame_type; /* Type information for group frames */
-  uint32_t temp_32[4];       /* Used for short-term 32-bit or BOOL values */
   uint8_t return_id;         /* Where to go on in internal "return" */
   uint8_t op;                /* Processing opcode */
+  uint8_t byte1;             /* A temporary byte to store anything */
+  uint8_t byte2;             /* A temporary byte to store anything */
 
-  /* At this point, the structure is 16-bit aligned. On most architectures
+  /* At this point, the structure is 32-bit aligned. On most architectures
   the alignment requirement for a pointer will ensure that the eptr field below
   is 32-bit or 64-bit aligned. However, on m68k it is fine to have a pointer
-  that is 16-bit aligned. We must therefore ensure that what comes between here
-  and eptr is an odd multiple of 16 bits so as to get back into 32-bit
-  alignment. This happens naturally when PCRE2_UCHAR is 8 bits wide, but needs
-  fudges in the other cases. In the 32-bit case the padding comes first so that
-  the occu field itself is 32-bit aligned. Without the padding, this structure
-  is no longer a multiple of PCRE2_SIZE on m68k, and the check below fails. */
-
+  that is 16-bit aligned, so all uint8_t members above are required for a 32
+  bit alignment. */
+
+  union {
+    /* Fields for storing localized data, which
+    is preserved by RMATCH() calls. */
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      PCRE2_SPTR charptr;
+      uint32_t min;
+      uint32_t max;
+      uint32_t c;
+      union {
+        uint32_t oc;
+        /* Buffer for other case code units. The size of
+        the buffer is enough to store the longest character. */
 #if PCRE2_CODE_UNIT_WIDTH == 8
-  PCRE2_UCHAR occu[6];       /* Used for other case code units */
+        PCRE2_UCHAR occu[4];
 #elif PCRE2_CODE_UNIT_WIDTH == 16
-  PCRE2_UCHAR occu[2];       /* Used for other case code units */
-  uint8_t unused[2];         /* Ensure 32-bit alignment (see above) */
+        PCRE2_UCHAR occu[2];
 #else
-  uint8_t unused[2];         /* Ensure 32-bit alignment (see above) */
-  PCRE2_UCHAR occu[1];       /* Used for other case code units */
+        PCRE2_UCHAR occu[1];
 #endif
+      } oc;
+    } char_repeat;
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      uint32_t min;
+      uint32_t max;
+      uint32_t c;
+      uint32_t oc;
+    } charnot_repeat;
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      PCRE2_SPTR byte_map_address;
+      uint32_t min;
+      uint32_t max;
+    } class_repeat;
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      PCRE2_SPTR xclass_data;
+      uint32_t min;
+      uint32_t max;
+    } xclass_repeat;
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      PCRE2_SPTR eclass_data;
+      PCRE2_SIZE eclass_len;
+      uint32_t min;
+      uint32_t max;
+    } eclass_repeat;
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      uint32_t min;
+      uint32_t max;
+      uint32_t ctype;
+      uint32_t propvalue;
+    } type_repeat;
+
+    struct {
+      PCRE2_SPTR start;
+      PCRE2_SIZE offset;
+      PCRE2_SIZE length;
+      uint32_t min;
+      uint32_t max;
+    } ref_repeat;
+
+    struct {
+      uint32_t frame_type;    /* Set for all that use GROUPLOOP */
+    } op_bra;
+
+    struct {
+      PCRE2_SPTR start_eptr;
+      PCRE2_SPTR start_group;
+      uint32_t frame_type;
+    } op_brapos;
+
+    struct {
+      PCRE2_SPTR start_branch;
+      uint32_t frame_type;
+    } op_recurse;
+
+    struct {
+      PCRE2_SPTR saved_end_subject;
+      PCRE2_SPTR saved_eptr;
+      PCRE2_SIZE true_end_extra;
+      uint32_t saved_moptions;
+    } op_assert_scs;
+
+    struct {
+      PCRE2_SPTR start_branch;
+      PCRE2_SIZE length;
+    } op_cond;
+
+    struct {
+      uint32_t min;
+      uint32_t max;
+    } op_vreverse;
+  } fields;
 
   /* The rest have to be copied from the previous frame whenever a new frame
   becomes current. The final field is specified as a large vector so that
index 3ab4592c3ada478839c280e1f6e83622bc0950ad..105a1dd35887d949a14ad699a0e6f15d641e7e0a 100644 (file)
@@ -321,6 +321,7 @@ typedef struct ref_iterator_backtrack {
   backtrack_common common;
   /* Next iteration. */
   struct sljit_label *matchingpath;
+  BOOL possessive_or_exact;
 } ref_iterator_backtrack;
 
 typedef struct recurse_entry {
@@ -1142,7 +1143,11 @@ cc += PRIV(OP_lengths)[*cc];
 /* Although do_casefulcmp() uses only one local, the allocate_stack()
 calls during the repeat destroys LOCAL1 variables. */
 if (*cc >= OP_CRSTAR && *cc <= OP_CRPOSRANGE)
+  {
   locals_size += 2 * SSIZE_OF(sw);
+  if (*cc >= OP_CRPOSRANGE && GET2(cc, 1 + IMM2_SIZE + 1) != GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE))
+    locals_size += SSIZE_OF(sw);
+  }
 
 return (current_locals_size >= locals_size) ? current_locals_size : locals_size;
 }
@@ -5413,15 +5418,15 @@ OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);
 static void do_utfreadchar_invalid(compiler_common *common)
 {
 /* Slow decoding a UTF-16 character. TMP1 contains the first half
-of the character (>= 0xd800). Return char value in TMP1. STR_PTR is
-undefined for invalid characters. */
+of the character (>= 0xd800). TMP2 contains TMP1 - 0xd800. Return
+char value in TMP1. STR_PTR is unchanged for invalid characters. */
 DEFINE_COMPILER;
 struct sljit_jump *exit_invalid[3];
 
 sljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);
 
 /* TMP2 contains the high surrogate. */
-exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00);
+exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400);
 exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
 
 OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));
@@ -5435,9 +5440,10 @@ exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400);
 OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);
 OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);
 
+JUMPHERE(exit_invalid[2]);
+OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
 JUMPHERE(exit_invalid[0]);
 JUMPHERE(exit_invalid[1]);
-JUMPHERE(exit_invalid[2]);
 OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);
 OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);
 }
@@ -5635,7 +5641,6 @@ struct sljit_jump *start;
 struct sljit_jump *end = NULL;
 struct sljit_jump *end2 = NULL;
 #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
-struct sljit_label *loop;
 struct sljit_jump *jump;
 #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */
 jump_list *newline = NULL;
@@ -5741,7 +5746,7 @@ mainloop = LABEL();
 
 /* Increasing the STR_PTR here requires one less jump in the most common case. */
 #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
-if (common->utf && !common->invalid_utf) readuchar = TRUE;
+if (common->utf) readuchar = TRUE;
 #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */
 if (newlinecheck) readuchar = TRUE;
 
@@ -5757,13 +5762,11 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
 if (common->invalid_utf)
   {
   /* Skip continuation code units. */
-  loop = LABEL();
-  jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
-  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);
-  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
-  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80);
-  CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x40, loop);
-  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0);
+  OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);
+  add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));
+  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);
+  SELECT(SLJIT_EQUAL, STR_PTR, TMP3, 0, STR_PTR);
   JUMPHERE(jump);
   }
 else if (common->utf)
@@ -5777,13 +5780,9 @@ else if (common->utf)
 if (common->invalid_utf)
   {
   /* Skip continuation code units. */
-  loop = LABEL();
-  jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
-  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);
-  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
-  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xdc00);
-  CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x400, loop);
-  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+  OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);
+  jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800);
+  add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));
   JUMPHERE(jump);
   }
 else if (common->utf)
@@ -6244,6 +6243,7 @@ while (TRUE)
       repeat = GET2(cc, 1);
       if (repeat <= 0)
         {
+        repeat = 1;
         chars_end = chars;
         continue;
         }
@@ -8390,9 +8390,10 @@ int offset = 0;
 struct sljit_label *label;
 struct sljit_jump *zerolength;
 struct sljit_jump *jump = NULL;
+jump_list *match_failed = NULL;
 PCRE2_SPTR ccbegin = cc;
 int min = 0, max = 0;
-BOOL minimize;
+BOOL minimize, exact;
 
 PUSH_BACKTRACK(sizeof(ref_iterator_backtrack), cc, NULL);
 
@@ -8415,31 +8416,50 @@ type = cc[1 + IMM2_SIZE];
 SLJIT_COMPILE_ASSERT((OP_CRSTAR & 0x1) == 0, crstar_opcode_must_be_even);
 /* Update ref_update_local_size() when this changes. */
 SLJIT_ASSERT(local_start + 2 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size);
-minimize = (type & 0x1) != 0;
+minimize = FALSE;
+exact = FALSE;
 switch(type)
   {
-  case OP_CRSTAR:
   case OP_CRMINSTAR:
+  minimize = TRUE;
+  PCRE2_FALLTHROUGH /* Fall through */
+  case OP_CRSTAR:
+  case OP_CRPOSSTAR:
   min = 0;
   max = 0;
   cc += 1 + IMM2_SIZE + 1;
   break;
-  case OP_CRPLUS:
+
   case OP_CRMINPLUS:
+  minimize = TRUE;
+  PCRE2_FALLTHROUGH /* Fall through */
+  case OP_CRPLUS:
+  case OP_CRPOSPLUS:
   min = 1;
   max = 0;
   cc += 1 + IMM2_SIZE + 1;
   break;
-  case OP_CRQUERY:
+
   case OP_CRMINQUERY:
+  minimize = TRUE;
+  PCRE2_FALLTHROUGH /* Fall through */
+  case OP_CRQUERY:
+  case OP_CRPOSQUERY:
   min = 0;
   max = 1;
   cc += 1 + IMM2_SIZE + 1;
   break;
-  case OP_CRRANGE:
+
   case OP_CRMINRANGE:
+  minimize = TRUE;
+  PCRE2_FALLTHROUGH /* Fall through */
+  case OP_CRRANGE:
+  case OP_CRPOSRANGE:
   min = GET2(cc, 1 + IMM2_SIZE + 1);
   max = GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE);
+  SLJIT_ASSERT(min > 1 || max > 1);
+  if (min == max)
+    exact = TRUE;
   cc += 1 + IMM2_SIZE + 1 + 2 * IMM2_SIZE;
   break;
   default:
@@ -8447,6 +8467,86 @@ switch(type)
   break;
   }
 
+if (type >= OP_CRPOSSTAR || exact)
+  {
+  BACKTRACK_AS(ref_iterator_backtrack)->possessive_or_exact = TRUE;
+  if (ref)
+    {
+    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
+    if (min > 0 && !common->unset_backref)
+      add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
+    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
+    }
+  else
+    {
+    compile_dnref_search(common, ccbegin, min > 0 ? &backtrack->own_backtracks : NULL);
+    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0);
+    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
+    }
+
+  if (exact)
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, min);
+  else if (type != OP_CRPOSSTAR)
+    {
+    /* STR_PTR is NULL before reaching min. */
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, min > 0 ? SLJIT_IMM : STR_PTR, 0);
+    if (type == OP_CRPOSRANGE)
+      {
+      SLJIT_ASSERT(local_start + 3 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size);
+      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 0);
+      }
+    }
+
+  label = LABEL();
+  if (!ref)
+    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw));
+
+  if (type == OP_CRPOSSTAR)
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0);
+
+  compile_ref_matchingpath(common, ccbegin, exact ? &backtrack->own_backtracks : &match_failed, FALSE, FALSE);
+
+  if (type == OP_CRPOSSTAR)
+    JUMPTO(SLJIT_JUMP, label);
+  else if (type == OP_CRPOSPLUS || type == OP_CRPOSQUERY)
+    {
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0);
+    if (type == OP_CRPOSPLUS)
+      JUMPTO(SLJIT_JUMP, label);
+    }
+  else if (exact)
+    {
+    OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1);
+    JUMPTO(SLJIT_NOT_ZERO, label);
+    }
+  else
+    {
+    OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 1);
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), TMP1, 0);
+    if (min > 0)
+      CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label);
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0);
+    if (max == 0)
+      JUMPTO(SLJIT_JUMP, label);
+    else
+      CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, max, label);
+    }
+
+  if (!exact)
+    {
+    set_jumps(match_failed, LABEL());
+    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), local_start);
+
+    if (type != OP_CRPOSSTAR)
+      add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0));
+    }
+
+  JUMPHERE(zerolength);
+  count_match(common);
+  return cc;
+  }
+
 if (!minimize)
   {
   if (min == 0)
@@ -8458,6 +8558,7 @@ if (!minimize)
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);
     /* Temporary release of STR_PTR. */
     OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
+
     /* Handles both invalid and empty cases. Since the minimum repeat,
     is zero the invalid case is basically the same as an empty case. */
     if (ref)
@@ -8469,6 +8570,7 @@ if (!minimize)
       OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0);
       zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
       }
+
     /* Restore if not zero length. */
     OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
     }
@@ -8477,6 +8579,7 @@ if (!minimize)
     allocate_stack(common, 1);
     if (ref)
       OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
+
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
 
     if (ref)
@@ -8504,11 +8607,11 @@ if (!minimize)
 
   if (min > 1 || max > 1)
     {
-    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start);
-    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);
+    OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1);
     OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, TMP1, 0);
     if (min > 1)
       CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label);
+
     if (max > 1)
       {
       jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, max);
@@ -12139,6 +12242,12 @@ PCRE2_UCHAR type;
 
 type = cc[PRIV(OP_lengths)[*cc]];
 
+if (CURRENT_AS(ref_iterator_backtrack)->possessive_or_exact)
+  {
+  set_jumps(current->own_backtracks, LABEL());
+  return;
+  }
+
 if ((type & 0x1) == 0)
   {
   /* Maximize case. */
@@ -12405,6 +12514,8 @@ else if (SLJIT_UNLIKELY(opcode == OP_ASSERT_SCS))
   if (common->restore_end_ptr == 0)
     common->restore_end_ptr = private_data_ptr + sizeof(sljit_sw);
   }
+else if (SLJIT_UNLIKELY(opcode == OP_ASSERTBACK_NA) && PRIVATE_DATA(ccbegin + 1))
+  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
 
 if (SLJIT_UNLIKELY(opcode == OP_ONCE))
   {
index 32d4c8a5e1a7d2a0c61f07549e7599bef7f16969..ba210007e3b5cf06c59ffd35e650f42c8d1caedb 100644 (file)
@@ -117,6 +117,7 @@ jit_arguments arguments;
 int rc;
 int index = 0;
 
+/* The same check is performed by jit_check_exec(). */
 if ((options & PCRE2_PARTIAL_HARD) != 0)
   index = 2;
 else if ((options & PCRE2_PARTIAL_SOFT) != 0)
@@ -125,6 +126,16 @@ else if ((options & PCRE2_PARTIAL_SOFT) != 0)
 if (functions == NULL || functions->executable_funcs[index] == NULL)
   return match_data->rc = PCRE2_ERROR_JIT_BADOPTION;
 
+/* If the match data block was previously used with PCRE2_COPY_MATCHED_SUBJECT,
+free the memory that was obtained. */
+
+if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0)
+  {
+  match_data->memctl.free((void *)match_data->subject,
+    match_data->memctl.memory_data);
+  match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT;
+  }
+
 /* Sanity checks should be handled by pcre2_match. */
 arguments.str = subject + start_offset;
 arguments.begin = subject;
index 0225fc6baf2005313a37b4dbefc8b91def0b174d..16c230e9b0a2da8d9ef6a82ab85a91d6e597b1ee 100644 (file)
@@ -200,17 +200,28 @@ if (jit_stack != NULL)
 
 
 /*************************************************
-*               Get target CPU type              *
+*          Checks function compilation           *
 *************************************************/
 
-const char*
-PRIV(jit_get_target)(void)
+BOOL
+PRIV(jit_check_exec)(void *executable_jit, uint32_t options)
 {
 #ifndef SUPPORT_JIT
-return "JIT is not supported";
+(void)executable_jit;
+(void)options;
+return FALSE;
 #else  /* SUPPORT_JIT */
-return sljit_get_platform_name();
-#endif  /* SUPPORT_JIT */
+/* The same check is performed at the beginning of pcre2_jit_match(). */
+executable_functions *functions = (executable_functions *)executable_jit;
+int index = 0;
+
+if ((options & PCRE2_PARTIAL_HARD) != 0)
+  index = 2;
+else if ((options & PCRE2_PARTIAL_SOFT) != 0)
+  index = 1;
+
+return functions->executable_funcs[index] != NULL;
+#endif
 }
 
 
@@ -231,4 +242,19 @@ return executable_sizes[0] + executable_sizes[1] + executable_sizes[2];
 #endif
 }
 
+/*************************************************
+*               Get target CPU type              *
+*************************************************/
+
+const char*
+PRIV(jit_get_target)(void)
+{
+#ifndef SUPPORT_JIT
+return "JIT is not supported";
+#else  /* SUPPORT_JIT */
+return sljit_get_platform_name();
+#endif  /* SUPPORT_JIT */
+}
+
+
 /* End of pcre2_jit_misc_inc.h */
index 1fc44db5ba8aec0344a417599a4826c51e34ed1d..7c4bcd684f106ae2b0e12f65d9f9a9e4a483636b 100644 (file)
@@ -281,6 +281,7 @@ static struct regression_test_case regression_test_cases[] = {
        { CM, A, 0, 0, "a1277|a1377|bx487", "bX487" },
        { 0, A, 0, 0, "(a|)b*+a", "a" },
        { 0, A, 0, 0 | F_NOMATCH, "(.|.|.|.|.)(|.|.|.|.)(.||.|.|.)(.|.||.|.)(.|.|.||.)(.|.|.|.|)(A|.|.|.|.)(.|A|.|.|.)(.|.|A|.|.)(.|.|.|A|.)(.|.|.|.|A)(B|.|.|.|.)(.|B|.|.|.)(.|.|B|.|.)(.|.|.|B|.)(.|.|.|.|B)xa", "1234567890123456ax" },
+       { 0, A, 0, 0, "(CHAN|LINE)[ab]{0,2}", "LINE" },
 
        /* Greedy and non-greedy ? operators. */
        { MU, A, 0, 0, "(?:a)?a", "laab" },
@@ -656,6 +657,7 @@ static struct regression_test_case regression_test_cases[] = {
        { MU, A, 0, 0 | F_NOMATCH, "a(?!)b", "ab" },
        { MU, A, 0, 0, "(?(?<!|(|a)))", "a" },
        { MU, A, 0, 0, "(?=((?|(a)(.)|(b)(..)|(c)(...)))(?1(2,3))).x", "b12c123bx2c123" },
+       { MU, A, 0, 3, "(?<*(.).{,2})\\1", "BABA" },
 
        /* Not empty, ACCEPT, FAIL */
        { MU, A, PCRE2_NOTEMPTY, 0 | F_NOMATCH, "a*", "bcx" },
index d5574d721a2719f49bfe5418545673ee3106a281..a5a8421f7c219dc66b7fbb87afffe148664bda40 100644 (file)
@@ -169,9 +169,9 @@ enum { RM200=200, RM201, RM202, RM203, RM204, RM205, RM206, RM207,
 /* Define short names for general fields in the current backtrack frame, which
 is always pointed to by the F variable. Occasional references to fields in
 other frames are written out explicitly. There are also some fields in the
-current frame whose names start with "temp" that are used for short-term,
-localised backtracking memory. These are #defined with Lxxx names at the point
-of use and undefined afterwards. */
+current frame that are used for short-term, localised backtracking memory.
+These are members of the fields union and #defined with Lxxx names at the
+point of use and undefined afterwards. */
 
 #define Fback_frame        F->back_frame
 #define Fcapture_last      F->capture_last
@@ -180,12 +180,10 @@ of use and undefined afterwards. */
 #define Feptr              F->eptr
 #define Fgroup_frame_type  F->group_frame_type
 #define Flast_group_offset F->last_group_offset
-#define Flength            F->length
 #define Fmark              F->mark
 #define Frdepth            F->rdepth
 #define Fstart_match       F->start_match
 #define Foffset_top        F->offset_top
-#define Foccu              F->occu
 #define Fop                F->op
 #define Fovector           F->ovector
 #define Freturn_id         F->return_id
@@ -457,8 +455,8 @@ if (caseless)
       {
       uint32_t cc, cp;
       if (eptr >= mb->end_subject) return 1;   /* Partial match */
-      cc = UCHAR21TEST(eptr);
-      cp = UCHAR21TEST(p);
+      cc = *eptr;
+      cp = *p;
       if (TABLE_GET(cp, mb->lcc, cp) != TABLE_GET(cc, mb->lcc, cc))
         return -1;  /* No match */
       p++;
@@ -478,7 +476,7 @@ else
     for (; length > 0; length--)
       {
       if (eptr >= mb->end_subject) return 1;   /* Partial match */
-      if (UCHAR21INCTEST(p) != UCHAR21INCTEST(eptr)) return -1;  /* No match */
+      if (*p++ != *eptr++) return -1;  /* No match */
       }
     }
 
@@ -697,7 +695,7 @@ heapframe *frames_top;  /* End of frames vector */
 heapframe *assert_accept_frame = NULL;  /* For passing back a frame with captures */
 PCRE2_SIZE frame_copy_size;   /* Amount to copy when creating a new frame */
 
-/* Local variables that do not need to be preserved over calls to RRMATCH(). */
+/* Local variables that do not need to be preserved over calls to RMATCH(). */
 
 PCRE2_SPTR branch_end = NULL;
 PCRE2_SPTR branch_start;
@@ -816,11 +814,11 @@ if (group_frame_type != 0)
     break;
 
     case GF_NOCAPTURE:
-    fprintf(stderr, "nocapture op=%d", GF_DATAMASK(group_frame_type));
+    fprintf(stderr, "nocapture op=%d", Fop);
     break;
 
     case GF_CONDASSERT:
-    fprintf(stderr, "condassert op=%d", GF_DATAMASK(group_frame_type));
+    fprintf(stderr, "condassert op=%d", Fop);
     break;
 
     case GF_RECURSE:
@@ -1066,7 +1064,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
         Feptr == mb->end_subject - 1 &&
         NLBLOCK->nltype == NLTYPE_FIXED &&
         NLBLOCK->nllen == 2 &&
-        UCHAR21TEST(Feptr) == NLBLOCK->nl[0])
+        *Feptr == NLBLOCK->nl[0])
       {
       mb->hitend = TRUE;
       if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;
@@ -1112,17 +1110,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 #ifdef SUPPORT_UNICODE
     if (utf)
       {
-      Flength = 1;
+      length = 1;
       Fecode++;
-      GETCHARLEN(fc, Fecode, Flength);
-      if (Flength > (PCRE2_SIZE)(mb->end_subject - Feptr))
+      GETCHARLEN(fc, Fecode, length);
+      if (length > (PCRE2_SIZE)(mb->end_subject - Feptr))
         {
         CHECK_PARTIAL();             /* Not SCHECK_PARTIAL() */
         RRETURN(MATCH_NOMATCH);
         }
-      for (; Flength > 0; Flength--)
+      for (; length > 0; length--)
         {
-        if (*Fecode++ != UCHAR21INC(Feptr)) RRETURN(MATCH_NOMATCH);
+        if (*Fecode++ != *Feptr++) RRETURN(MATCH_NOMATCH);
         }
       }
     else
@@ -1157,9 +1155,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 #ifdef SUPPORT_UNICODE
     if (utf)
       {
-      Flength = 1;
+      length = 1;
       Fecode++;
-      GETCHARLEN(fc, Fecode, Flength);
+      GETCHARLEN(fc, Fecode, length);
 
       /* If the pattern character's value is < 128, we know that its other case
       (if any) is also < 128 (and therefore only one code unit long in all
@@ -1168,7 +1166,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
       if (fc < 128)
         {
-        uint32_t cc = UCHAR21(Feptr);
+        uint32_t cc = *Feptr;
         if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH);
         Fecode++;
         Feptr++;
@@ -1176,14 +1174,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
       /* Otherwise we must pick up the subject character and use Unicode
       property support to test its other case. Note that we cannot use the
-      value of "Flength" to check for sufficient bytes left, because the other
+      value of "length" to check for sufficient bytes left, because the other
       case of the character may have more or fewer code units. */
 
       else
         {
         uint32_t dc;
         GETCHARINC(dc, Feptr);
-        Fecode += Flength;
+        Fecode += length;
         if (dc != fc && dc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH);
         }
       }
@@ -1193,7 +1191,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
     else if (ucp)
       {
-      uint32_t cc = UCHAR21(Feptr);
+      uint32_t cc = *Feptr;
       fc = Fecode[1];
       if (fc < 128)
         {
@@ -1257,7 +1255,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     else if (ucp)
       {
       uint32_t ch;
-      fc = UCHAR21INC(Feptr);
+      fc = *Feptr++;
       ch = Fecode[1];
       Fecode += 2;
 
@@ -1282,7 +1280,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
       {
       uint32_t ch = Fecode[1];
-      fc = UCHAR21INC(Feptr);
+      fc = *Feptr++;
       if (ch == fc || (Fop == OP_NOTI && TABLE_GET(ch, mb->fcc, ch) == fc))
         RRETURN(MATCH_NOMATCH);
       Fecode += 2;
@@ -1293,13 +1291,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     /* ===================================================================== */
     /* Match a single character repeatedly. */
 
-#define Loclength    F->temp_size
-#define Lstart_eptr  F->temp_sptr[0]
-#define Lcharptr     F->temp_sptr[1]
-#define Lmin         F->temp_32[0]
-#define Lmax         F->temp_32[1]
-#define Lc           F->temp_32[2]
-#define Loc          F->temp_32[3]
+#define Llength      F->byte1
+#define Loclength    F->byte2
+#define Lstart_eptr  F->fields.char_repeat.start_eptr
+#define Lcharptr     F->fields.char_repeat.charptr
+#define Lmin         F->fields.char_repeat.min
+#define Lmax         F->fields.char_repeat.max
+#define Lc           F->fields.char_repeat.c
+#define Loc          F->fields.char_repeat.oc.oc
+#define Loccu        F->fields.char_repeat.oc.occu
 
     case OP_EXACT:
     case OP_EXACTI:
@@ -1393,29 +1393,30 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 #ifdef SUPPORT_UNICODE
     if (utf)
       {
-      Flength = 1;
+      length = 1;
       Lcharptr = Fecode;
-      GETCHARLEN(fc, Fecode, Flength);
-      Fecode += Flength;
+      GETCHARLEN(fc, Fecode, length);
+      Fecode += length;
+      Llength = (uint8_t)length;
 
       /* Handle multi-code-unit character matching, caseful and caseless. */
 
-      if (Flength > 1)
+      if (length > 1)
         {
         uint32_t othercase;
 
         if (Fop >= OP_STARI &&     /* Caseless */
             (othercase = UCD_OTHERCASE(fc)) != fc)
-          Loclength = PRIV(ord2utf)(othercase, Foccu);
+          Loclength = (uint8_t)PRIV(ord2utf)(othercase, Loccu);
         else Loclength = 0;
 
         for (i = 1; i <= Lmin; i++)
           {
-          if (Feptr <= mb->end_subject - Flength &&
-            memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength;
+          if (Feptr <= mb->end_subject - length &&
+            memcmp(Feptr, Lcharptr, CU2BYTES(length)) == 0) Feptr += length;
           else if (Loclength > 0 &&
                    Feptr <= mb->end_subject - Loclength &&
-                   memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0)
+                   memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0)
             Feptr += Loclength;
           else
             {
@@ -1433,11 +1434,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             RMATCH(Fecode, RM202);
             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
             if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);
-            if (Feptr <= mb->end_subject - Flength &&
-              memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength;
+            if (Feptr <= mb->end_subject - Llength &&
+              memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) Feptr += Llength;
             else if (Loclength > 0 &&
                      Feptr <= mb->end_subject - Loclength &&
-                     memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0)
+                     memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0)
               Feptr += Loclength;
             else
               {
@@ -1447,18 +1448,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             }
           PCRE2_UNREACHABLE(); /* Control never reaches here */
           }
-
         else  /* Maximize */
           {
           Lstart_eptr = Feptr;
           for (i = Lmin; i < Lmax; i++)
             {
-            if (Feptr <= mb->end_subject - Flength &&
-                memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0)
-              Feptr += Flength;
+            if (Feptr <= mb->end_subject - Llength &&
+                memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0)
+              Feptr += Llength;
             else if (Loclength > 0 &&
                      Feptr <= mb->end_subject - Loclength &&
-                     memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0)
+                     memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0)
               Feptr += Loclength;
             else
               {
@@ -1523,7 +1523,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
           SCHECK_PARTIAL();
           RRETURN(MATCH_NOMATCH);
           }
-        cc = UCHAR21TEST(Feptr);
+        cc = *Feptr;
         if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH);
         Feptr++;
         }
@@ -1542,7 +1542,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          cc = UCHAR21TEST(Feptr);
+          cc = *Feptr;
           if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH);
           Feptr++;
           }
@@ -1560,7 +1560,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             break;
             }
-          cc = UCHAR21TEST(Feptr);
+          cc = *Feptr;
           if (Lc != cc && Loc != cc) break;
           Feptr++;
           }
@@ -1585,7 +1585,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
           SCHECK_PARTIAL();
           RRETURN(MATCH_NOMATCH);
           }
-        if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH);
+        if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH);
         }
 
       if (Lmin == Lmax) continue;
@@ -1602,7 +1602,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH);
+          if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH);
           }
         PCRE2_UNREACHABLE(); /* Control never reaches here */
         }
@@ -1617,7 +1617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             break;
             }
 
-          if (Lc != UCHAR21TEST(Feptr)) break;
+          if (Lc != *Feptr) break;
           Feptr++;
           }
 
@@ -1632,6 +1632,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       }
     break;
 
+#undef Llength
 #undef Loclength
 #undef Lstart_eptr
 #undef Lcharptr
@@ -1639,6 +1640,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 #undef Lmax
 #undef Lc
 #undef Loc
+#undef Loccu
 
 
     /* ===================================================================== */
@@ -1649,11 +1651,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     very much to the time taken, but character matching *is* what this is all
     about... */
 
-#define Lstart_eptr  F->temp_sptr[0]
-#define Lmin         F->temp_32[0]
-#define Lmax         F->temp_32[1]
-#define Lc           F->temp_32[2]
-#define Loc          F->temp_32[3]
+#define Lstart_eptr  F->fields.charnot_repeat.start_eptr
+#define Lmin         F->fields.charnot_repeat.min
+#define Lmax         F->fields.charnot_repeat.max
+#define Lc           F->fields.charnot_repeat.c
+#define Loc          F->fields.charnot_repeat.oc
 
     case OP_NOTEXACT:
     case OP_NOTEXACTI:
@@ -2040,11 +2042,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     OP_CLASS and OP_NCLASS occurs when a data character outside the range is
     encountered. */
 
-#define Lmin               F->temp_32[0]
-#define Lmax               F->temp_32[1]
-#define Lstart_eptr        F->temp_sptr[0]
-#define Lbyte_map_address  F->temp_sptr[1]
+#define Lbyte_map_address  F->fields.class_repeat.byte_map_address
 #define Lbyte_map          ((const unsigned char *)Lbyte_map_address)
+#define Lstart_eptr        F->fields.class_repeat.start_eptr
+#define Lmin               F->fields.class_repeat.min
+#define Lmax               F->fields.class_repeat.max
 
     case OP_NCLASS:
     case OP_CLASS:
@@ -2283,10 +2285,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     32-bit libraries, codepoints greater than 255 may be encountered even when
     UTF is not supported. */
 
-#define Lstart_eptr  F->temp_sptr[0]
-#define Lxclass_data F->temp_sptr[1]
-#define Lmin         F->temp_32[0]
-#define Lmax         F->temp_32[1]
+#define Lstart_eptr  F->fields.xclass_repeat.start_eptr
+#define Lxclass_data F->fields.xclass_repeat.xclass_data
+#define Lmin         F->fields.xclass_repeat.min
+#define Lmax         F->fields.xclass_repeat.max
 
 #ifdef SUPPORT_WIDE_CHARS
     case OP_XCLASS:
@@ -2424,11 +2426,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     there is complex nesting or logical operations within the character
     class. */
 
-#define Lstart_eptr  F->temp_sptr[0]
-#define Leclass_data F->temp_sptr[1]
-#define Leclass_len  F->temp_size
-#define Lmin         F->temp_32[0]
-#define Lmax         F->temp_32[1]
+#define Lstart_eptr  F->fields.eclass_repeat.start_eptr
+#define Leclass_data F->fields.eclass_repeat.eclass_data
+#define Leclass_len  F->fields.eclass_repeat.eclass_len
+#define Lmin         F->fields.eclass_repeat.min
+#define Lmax         F->fields.eclass_repeat.max
 
 #ifdef SUPPORT_WIDE_CHARS
     case OP_ECLASS:
@@ -2657,7 +2659,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
         {
         SCHECK_PARTIAL();
         }
-      else if (UCHAR21TEST(Feptr) == CHAR_LF) Feptr++;
+      else if (*Feptr == CHAR_LF) Feptr++;
       break;
 
       case CHAR_LF:
@@ -2908,11 +2910,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     does not need to be in a stack frame as it is not used within an RMATCH()
     loop. */
 
-#define Lstart_eptr  F->temp_sptr[0]
-#define Lmin         F->temp_32[0]
-#define Lmax         F->temp_32[1]
-#define Lctype       F->temp_32[2]
-#define Lpropvalue   F->temp_32[3]
+#define Lstart_eptr  F->fields.type_repeat.start_eptr
+#define Lmin         F->fields.type_repeat.min
+#define Lmax         F->fields.type_repeat.max
+#define Lctype       F->fields.type_repeat.ctype
+#define Lpropvalue   F->fields.type_repeat.propvalue
 
     case OP_TYPEEXACT:
     Lmin = Lmax = GET2(Fecode, 1);
@@ -3271,7 +3273,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
               Feptr + 1 >= mb->end_subject &&
               NLBLOCK->nltype == NLTYPE_FIXED &&
               NLBLOCK->nllen == 2 &&
-              UCHAR21(Feptr) == NLBLOCK->nl[0])
+              *Feptr == NLBLOCK->nl[0])
             {
             mb->hitend = TRUE;
             if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;
@@ -3313,7 +3315,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             default: RRETURN(MATCH_NOMATCH);
 
             case CHAR_CR:
-            if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++;
+            if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++;
             break;
 
             case CHAR_LF:
@@ -3423,7 +3425,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          cc = UCHAR21(Feptr);
+          cc = *Feptr;
           if (cc >= 128 || (mb->ctypes[cc] & ctype_digit) == 0)
             RRETURN(MATCH_NOMATCH);
           Feptr++;
@@ -3440,7 +3442,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          cc = UCHAR21(Feptr);
+          cc = *Feptr;
           if (cc < 128 && (mb->ctypes[cc] & ctype_space) != 0)
             RRETURN(MATCH_NOMATCH);
           Feptr++;
@@ -3457,7 +3459,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          cc = UCHAR21(Feptr);
+          cc = *Feptr;
           if (cc >= 128 || (mb->ctypes[cc] & ctype_space) == 0)
             RRETURN(MATCH_NOMATCH);
           Feptr++;
@@ -3474,7 +3476,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          cc = UCHAR21(Feptr);
+          cc = *Feptr;
           if (cc < 128 && (mb->ctypes[cc] & ctype_word) != 0)
             RRETURN(MATCH_NOMATCH);
           Feptr++;
@@ -3491,7 +3493,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             SCHECK_PARTIAL();
             RRETURN(MATCH_NOMATCH);
             }
-          cc = UCHAR21(Feptr);
+          cc = *Feptr;
           if (cc >= 128 || (mb->ctypes[cc] & ctype_word) == 0)
             RRETURN(MATCH_NOMATCH);
           Feptr++;
@@ -4119,7 +4121,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
               default: RRETURN(MATCH_NOMATCH);
 
               case CHAR_CR:
-              if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++;
+              if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++;
               break;
 
               case CHAR_LF:
@@ -4732,7 +4734,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
                 Feptr + 1 >= mb->end_subject &&
                 NLBLOCK->nltype == NLTYPE_FIXED &&
                 NLBLOCK->nllen == 2 &&
-                UCHAR21(Feptr) == NLBLOCK->nl[0])
+                *Feptr == NLBLOCK->nl[0])
               {
               mb->hitend = TRUE;
               if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;
@@ -4788,7 +4790,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             if (fc == CHAR_CR)
               {
               if (++Feptr >= mb->end_subject) break;
-              if (UCHAR21(Feptr) == CHAR_LF) Feptr++;
+              if (*Feptr == CHAR_LF) Feptr++;
               }
             else
               {
@@ -4960,7 +4962,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
           Feptr--;
           BACKCHAR(Feptr);
           if (Lctype == OP_ANYNL && Feptr > Lstart_eptr &&
-              UCHAR21(Feptr) == CHAR_NL && UCHAR21(Feptr - 1) == CHAR_CR)
+              *Feptr == CHAR_NL && Feptr[-1] == CHAR_CR)
             Feptr--;
           }
         }
@@ -5236,17 +5238,18 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     OP_DNREFI are used. In this case we must scan the list of groups to which
     the name refers, and use the first one that is set. */
 
-#define Lmin      F->temp_32[0]
-#define Lmax      F->temp_32[1]
-#define Lcaseless F->temp_32[2]
-#define Lcaseopts F->temp_32[3]
-#define Lstart    F->temp_sptr[0]
-#define Loffset   F->temp_size
+#define Lstart    F->fields.ref_repeat.start
+#define Loffset   F->fields.ref_repeat.offset
+#define Llength   F->fields.ref_repeat.length
+#define Lmin      F->fields.ref_repeat.min
+#define Lmax      F->fields.ref_repeat.max
+#define Lcaseless F->byte1
+#define Lcaseopts F->byte2
 
     case OP_DNREF:
     case OP_DNREFI:
-    Lcaseless = (Fop == OP_DNREFI);
-    Lcaseopts = (Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0;
+    Lcaseless = (uint8_t)(Fop == OP_DNREFI);
+    Lcaseopts = (uint8_t)((Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0);
       {
       int count = GET2(Fecode, 1+IMM2_SIZE);
       PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size;
@@ -5281,6 +5284,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       case OP_CRMINPLUS:
       case OP_CRQUERY:
       case OP_CRMINQUERY:
+      case OP_CRPOSSTAR:
+      case OP_CRPOSPLUS:
+      case OP_CRPOSQUERY:
       fc = *Fecode++ - OP_CRSTAR;
       Lmin = rep_min[fc];
       Lmax = rep_max[fc];
@@ -5289,6 +5295,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
       case OP_CRRANGE:
       case OP_CRMINRANGE:
+      case OP_CRPOSRANGE:
       Lmin = GET2(Fecode, 1);
       Lmax = GET2(Fecode, 1 + IMM2_SIZE);
       reptype = rep_typ[*Fecode - OP_CRSTAR];
@@ -5376,7 +5383,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       {
       BOOL samelengths = TRUE;
       Lstart = Feptr;     /* Starting position */
-      Flength = Fovector[Loffset+1] - Fovector[Loffset];
+      Llength = Fovector[Loffset+1] - Fovector[Loffset];
 
       for (i = Lmin; i < Lmax; i++)
         {
@@ -5396,10 +5403,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
           break;
           }
 
-        if (slength != Flength) samelengths = FALSE;
+        if (slength != Llength) samelengths = FALSE;
         Feptr += slength;
         }
 
+      /* No recursion if the repeat type is possessive. */
+      if (reptype == REPTYPE_POS) break;
+
       /* If the length matched for each repetition is the same as the length of
       the captured group, we can easily work backwards. This is the normal
       case. However, in caseless UTF-8 mode there are pairs of case-equivalent
@@ -5412,7 +5422,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
           {
           RMATCH(Fecode, RM21);
           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          Feptr -= Flength;
+          Feptr -= Llength;
           }
         }
 
@@ -5443,12 +5453,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
     PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */
 
-#undef Lcaseless
-#undef Lmin
-#undef Lmax
 #undef Lstart
 #undef Loffset
-
+#undef Llength
+#undef Lmin
+#undef Lmax
+#undef Lcaseless
+#undef Lcaseopts
 
 
 /* ========================================================================= */
@@ -5475,30 +5486,37 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     number of copies, with the optional ones preceded by BRAZERO or BRAMINZERO.
     Possessive groups with possible zero repeats are preceded by BRAPOSZERO. */
 
-#define Lnext_ecode F->temp_sptr[0]
-
     case OP_BRAZERO:
-    Lnext_ecode = Fecode + 1;
-    RMATCH(Lnext_ecode, RM9);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-    do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT);
-    Fecode = Lnext_ecode + 1 + LINK_SIZE;
+      {
+      PCRE2_SPTR next_ecode;
+
+      Fecode++;
+      RMATCH(Fecode, RM9);
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      next_ecode = Fecode;
+      do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT);
+      Fecode = next_ecode + 1 + LINK_SIZE;
+      }
     break;
 
     case OP_BRAMINZERO:
-    Lnext_ecode = Fecode + 1;
-    do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT);
-    RMATCH(Lnext_ecode + 1 + LINK_SIZE, RM10);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-    Fecode++;
-    break;
+      {
+      PCRE2_SPTR next_ecode;
 
-#undef Lnext_ecode
+      Fecode++;
+      next_ecode = Fecode;
+      do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT);
+      RMATCH(next_ecode + 1 + LINK_SIZE, RM10);
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      }
+    break;
 
     case OP_SKIPZERO:
-    Fecode++;
-    do Fecode += GET(Fecode,1); while (*Fecode == OP_ALT);
-    Fecode += 1 + LINK_SIZE;
+      {
+      PCRE2_SPTR next_ecode = Fecode + 1;
+      do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT);
+      Fecode = next_ecode + 1 + LINK_SIZE;
+      }
     break;
 
 
@@ -5507,11 +5525,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     brackets will always be OP_KETRPOS, which returns MATCH_KETRPOS without
     going further in the pattern. */
 
-#define Lframe_type    F->temp_32[0]
-#define Lmatched_once  F->temp_32[1]
-#define Lzero_allowed  F->temp_32[2]
-#define Lstart_eptr    F->temp_sptr[0]
-#define Lstart_group   F->temp_sptr[1]
+#define Lstart_eptr    F->fields.op_brapos.start_eptr
+#define Lstart_group   F->fields.op_brapos.start_group
+#define Lframe_type    F->fields.op_brapos.frame_type
+#define Lmatched_once  F->byte1
+#define Lzero_allowed  F->byte2
 
     case OP_BRAPOSZERO:
     Lzero_allowed = TRUE;                /* Zero repeat is allowed */
@@ -5583,11 +5601,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
     RRETURN(MATCH_NOMATCH);
 
-#undef Lmatched_once
-#undef Lzero_allowed
-#undef Lframe_type
 #undef Lstart_eptr
 #undef Lstart_group
+#undef Lframe_type
+#undef Lmatched_once
+#undef Lzero_allowed
 
 
     /* ===================================================================== */
@@ -5599,8 +5617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     however, because that would make handling assertions and once-only brackets
     messier when there is nothing to go back to. */
 
-#define Lframe_type F->temp_32[0]     /* Set for all that use GROUPLOOP */
-#define Lnext_branch F->temp_sptr[0]  /* Used only in OP_BRA handling */
+#define Lframe_type    F->fields.op_bra.frame_type
 
     case OP_BRA:
     if (mb->hasthen || Frdepth == 0)
@@ -5611,24 +5628,31 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
     for (;;)
       {
-      Lnext_branch = Fecode + GET(Fecode, 1);
-      if (*Lnext_branch != OP_ALT) break;
+      PCRE2_SPTR current_branch = Fecode;
+      PCRE2_SPTR next_branch = current_branch + GET(current_branch, 1);
+
+      if (*next_branch != OP_ALT) break;
 
       /* This is never the final branch. We do not need to test for MATCH_THEN
       here because this code is not used when there is a THEN in the pattern. */
 
-      RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM1);
+      Fecode = next_branch;
+      PCRE2_ASSERT((*current_branch == OP_BRA || *current_branch == OP_ALT) &&
+                   PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE &&
+                   PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE);
+
+      RMATCH(current_branch + 1 + LINK_SIZE, RM1);
       if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-      Fecode = Lnext_branch;
       }
 
     /* Hit the start of the final branch. Continue at this level. */
 
-    Fecode += PRIV(OP_lengths)[*Fecode];
+    PCRE2_ASSERT((*Fecode == OP_BRA || *Fecode == OP_ALT) &&
+                 PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE &&
+                 PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE);
+    Fecode += 1 + LINK_SIZE;
     break;
 
-#undef Lnext_branch
-
 
     /* ===================================================================== */
     /* Handle a capturing bracket, other than those that are possessive with an
@@ -5647,7 +5671,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     case OP_ONCE:
     case OP_SCRIPT_RUN:
     case OP_SBRA:
-    Lframe_type = GF_NOCAPTURE | Fop;
+    Lframe_type = GF_NOCAPTURE;
 
     GROUPLOOP:
     for (;;)
@@ -5677,8 +5701,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     subpatterns. For a whole-pattern recursion, we have to infer the number
     zero. */
 
-#define Lframe_type F->temp_32[0]
-#define Lstart_branch F->temp_sptr[0]
+#define Lstart_branch  F->fields.op_recurse.start_branch
+#define Lframe_type    F->fields.op_recurse.frame_type
 
     case OP_RECURSE:
     bracode = mb->start_code + GET(Fecode, 1);
@@ -5752,8 +5776,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       }
     PCRE2_UNREACHABLE(); /* Control never reaches here */
 
-#undef Lframe_type
 #undef Lstart_branch
+#undef Lframe_type
 
 
     /* ===================================================================== */
@@ -5762,16 +5786,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     treated as NOMATCH. (*ACCEPT) is treated as successful assertion, with its
     captures and mark retained. Any other return is an error. */
 
-#define Lframe_type  F->temp_32[0]
-
     case OP_ASSERT:
     case OP_ASSERTBACK:
     case OP_ASSERT_NA:
     case OP_ASSERTBACK_NA:
-    Lframe_type = GF_NOCAPTURE | Fop;
     for (;;)
       {
-      group_frame_type = Lframe_type;
+      group_frame_type = GF_NOCAPTURE;
       RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM3);
       if (rrc == MATCH_ACCEPT)
         {
@@ -5791,22 +5812,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     Fecode += 1 + LINK_SIZE;
     break;
 
-#undef Lframe_type
-
 
     /* ===================================================================== */
     /* Handle negative assertions. Loop for each non-matching branch as for
     positive assertions. */
 
-#define Lframe_type  F->temp_32[0]
-
     case OP_ASSERT_NOT:
     case OP_ASSERTBACK_NOT:
-    Lframe_type  = GF_NOCAPTURE | Fop;
-
     for (;;)
       {
-      group_frame_type = Lframe_type;
+      group_frame_type = GF_NOCAPTURE;
       RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM4);
       switch(rrc)
         {
@@ -5839,22 +5854,20 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     Fecode += 1 + LINK_SIZE;
     break;
 
-#undef Lframe_type
 
     /* ===================================================================== */
     /* Handle scan substring operation. */
 
-#define Lframe_type          F->temp_32[0]
-#define Lextra_size          F->temp_32[1]
-#define Lsaved_moptions      F->temp_32[2]
-#define Lsaved_end_subject   F->temp_sptr[0]
-#define Lsaved_eptr          F->temp_sptr[1]
-#define Ltrue_end_extra      F->temp_size
+#define Lsaved_end_subject   F->fields.op_assert_scs.saved_end_subject
+#define Lsaved_eptr          F->fields.op_assert_scs.saved_eptr
+#define Ltrue_end_extra      F->fields.op_assert_scs.true_end_extra
+#define Lextra_size          F->fields.op_assert_scs.extra_size
+#define Lsaved_moptions      F->fields.op_assert_scs.saved_moptions
 
     case OP_ASSERT_SCS:
+    length = 0;
       {
       PCRE2_SPTR ecode = Fecode + 1 + LINK_SIZE;
-      uint32_t extra_size = 0;
       int count;
       PCRE2_SPTR slot;
 
@@ -5866,7 +5879,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
         {
         if (*ecode == OP_CREF)
           {
-          extra_size += 1+IMM2_SIZE;
+          length += 1+IMM2_SIZE;
           offset = (GET2(ecode, 1) << 1) - 2;
           ecode += 1+IMM2_SIZE;
           if (offset < Foffset_top && Fovector[offset] != PCRE2_UNSET)
@@ -5878,7 +5891,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
         count = GET2(ecode, 1 + IMM2_SIZE);
         slot = mb->name_table + GET2(ecode, 1) * mb->name_entry_size;
-        extra_size += 1+2*IMM2_SIZE;
+        length += 1+2*IMM2_SIZE;
         ecode += 1+2*IMM2_SIZE;
 
         while (count > 0)
@@ -5898,18 +5911,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
         {
         if (*ecode == OP_CREF)
           {
-          extra_size += 1+IMM2_SIZE;
+          length += 1+IMM2_SIZE;
           ecode += 1+IMM2_SIZE;
           }
         else if (*ecode == OP_DNCREF)
           {
-          extra_size += 1+2*IMM2_SIZE;
+          length += 1+2*IMM2_SIZE;
           ecode += 1+2*IMM2_SIZE;
           }
         else break;
         }
-
-      Lextra_size = extra_size;
       }
 
     Lsaved_end_subject = mb->end_subject;
@@ -5922,11 +5933,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       mb->start_subject + Fovector[offset + 1];
     mb->moptions &= ~PCRE2_NOTEOL;
 
-    Lframe_type = GF_NOCAPTURE | Fop;
     for (;;)
       {
-      group_frame_type = Lframe_type;
-      RMATCH(Fecode + 1 + LINK_SIZE + Lextra_size, RM38);
+      group_frame_type = GF_NOCAPTURE;
+      RMATCH(Fecode + 1 + LINK_SIZE + length, RM38);
       if (rrc == MATCH_ACCEPT)
         {
         memcpy(Fovector,
@@ -5956,7 +5966,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
         mb->moptions = Lsaved_moptions;
         RRETURN(MATCH_NOMATCH);
         }
-      Lextra_size = 0;
+      length = 0;
       }
 
     do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT);
@@ -5964,13 +5974,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     Feptr = Lsaved_eptr;
     break;
 
-#undef Lframe_type
-#undef Lextra_size
 #undef Lsaved_end_subject
 #undef Lsaved_eptr
 #undef Ltrue_end_extra
+#undef Lextra_size
 #undef Lsave_moptions
 
+
     /* ===================================================================== */
     /* The callout item calls an external function, if one is provided, passing
     details of the match so far. This is mainly for debugging, though the
@@ -5991,18 +6001,22 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     past the end of the item if there is only one branch, but that's exactly
     what we want. */
 
+#define Lstart_branch  F->fields.op_cond.start_branch
+#define Llength        F->fields.op_cond.length
+#define Lpositive      F->byte1
+
     case OP_COND:
     case OP_SCOND:
 
-    /* The variable Flength will be added to Fecode when the condition is
+    /* The variable Llength will be added to Fecode when the condition is
     false, to get to the second branch. Setting it to the offset to the ALT or
     KET, then incrementing Fecode achieves this effect. However, if the second
     branch is non-existent, we must point to the KET so that the end of the
     group is correctly processed. We now have Fecode pointing to the condition
     or callout. */
 
-    Flength = GET(Fecode, 1);    /* Offset to the second branch */
-    if (Fecode[Flength] != OP_ALT) Flength -= 1 + LINK_SIZE;
+    Llength = GET(Fecode, 1);    /* Offset to the second branch */
+    if (Fecode[Llength] != OP_ALT) Llength -= 1 + LINK_SIZE;
     Fecode += 1 + LINK_SIZE;     /* From this opcode */
 
     /* Because of the way auto-callout works during compile, a callout item is
@@ -6016,10 +6030,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       if (rrc < 0) RRETURN(rrc);
 
       /* Advance Fecode past the callout, so it now points to the condition. We
-      must adjust Flength so that the value of Fecode+Flength is unchanged. */
+      must adjust Llength so that the value of Fecode+Llength is unchanged. */
 
       Fecode += length;
-      Flength -= length;
+      Llength -= length;
       }
 
     /* Test the various possible conditions */
@@ -6080,16 +6094,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       /* The condition is an assertion. Run code similar to the assertion code
       above. */
 
-#define Lpositive      F->temp_32[0]
-#define Lstart_branch  F->temp_sptr[0]
 
       default:
-      Lpositive = (*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK);
+      Lpositive = (uint8_t)(*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK);
       Lstart_branch = Fecode;
 
       for (;;)
         {
-        group_frame_type = GF_CONDASSERT | *Fecode;
+        group_frame_type = GF_CONDASSERT;
         RMATCH(Lstart_branch + PRIV(OP_lengths)[*Lstart_branch], RM5);
 
         switch(rrc)
@@ -6142,12 +6154,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       break;  /* End of assertion condition */
       }
 
-#undef Lpositive
-#undef Lstart_branch
-
     /* Choose branch according to the condition. */
 
-    Fecode += condition? PRIV(OP_lengths)[*Fecode] : Flength;
+    Fecode += condition? PRIV(OP_lengths)[*Fecode] : Llength;
 
     /* If the opcode is OP_SCOND it means we are at a repeated conditional
     group that might match an empty string. We must therefore descend a level
@@ -6156,12 +6165,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
     if (Fop == OP_SCOND)
       {
-      group_frame_type  = GF_NOCAPTURE | Fop;
+      group_frame_type = GF_NOCAPTURE;
       RMATCH(Fecode, RM35);
       RRETURN(rrc);
       }
     break;
 
+#undef Lstart_branch
+#undef Llength
+#undef Lpositive
 
 
 /* ========================================================================= */
@@ -6215,14 +6227,12 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
     the start to move back even the minimum amount, fail. When working with
     UTF-8 we move back a number of characters, not bytes. */
 
-#define Lmin F->temp_32[0]
-#define Lmax F->temp_32[1]
-#define Leptr F->temp_sptr[0]
+#define Lmin    F->fields.op_vreverse.min
+#define Lmax    F->fields.op_vreverse.max
 
     case OP_VREVERSE:
     Lmin = GET2(Fecode, 1);
     Lmax = GET2(Fecode, 1 + IMM2_SIZE);
-    Leptr = Feptr;
 
     /* Move back by the maximum branch length and then work forwards. This
     ensures that items such as \d{3,5} get the maximum length, which is
@@ -6273,7 +6283,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
 
 #undef Lmin
 #undef Lmax
-#undef Leptr
+
 
     /* ===================================================================== */
     /* An alternation is the end of a branch; scan along to find the end of the
@@ -6328,7 +6338,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       N so that they are set on return. Doing this for all assertions, both
       positive and negative, seems to match what Perl does. */
 
-      if (GF_IDMASK(N->group_frame_type) == GF_CONDASSERT)
+      if (N->group_frame_type == GF_CONDASSERT)
         {
         if ((*bracode == OP_ASSERTBACK || *bracode == OP_ASSERTBACK_NOT) &&
             branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr)
@@ -6451,14 +6461,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
       pattern. */
 
       case OP_ASSERT_SCS:
-      F->temp_sptr[0] = mb->end_subject;
-      mb->end_subject = P->temp_sptr[0];
-      mb->true_end_subject = mb->end_subject + P->temp_size;
-      Feptr = P->temp_sptr[1];
+      F->fields.op_assert_scs.saved_end_subject = mb->end_subject;
+      mb->end_subject = P->fields.op_assert_scs.saved_end_subject;
+      mb->true_end_subject = mb->end_subject + P->fields.op_assert_scs.true_end_extra;
+      Feptr = P->fields.op_assert_scs.saved_eptr;
 
       RMATCH(Fecode + 1 + LINK_SIZE, RM39);
 
-      mb->end_subject = F->temp_sptr[0];
+      mb->end_subject = F->fields.op_assert_scs.saved_end_subject;
       mb->true_end_subject = mb->end_subject;
       RRETURN(rrc);
       break;
@@ -6599,7 +6609,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
           Feptr + 1 >= mb->end_subject &&
           NLBLOCK->nltype == NLTYPE_FIXED &&
           NLBLOCK->nllen == 2 &&
-          UCHAR21TEST(Feptr) == NLBLOCK->nl[0])
+          *Feptr == NLBLOCK->nl[0])
         {
         mb->hitend = TRUE;
         if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;
@@ -6647,7 +6657,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
             Feptr + 1 >= mb->end_subject &&
             NLBLOCK->nltype == NLTYPE_FIXED &&
             NLBLOCK->nllen == 2 &&
-            UCHAR21TEST(Feptr) == NLBLOCK->nl[0])
+            *Feptr == NLBLOCK->nl[0])
           {
           mb->hitend = TRUE;
           if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;
@@ -6995,10 +7005,6 @@ PCRE2_SPTR req_cu_ptr;
 PCRE2_SPTR start_partial;
 PCRE2_SPTR match_partial;
 
-#ifdef SUPPORT_JIT
-BOOL use_jit;
-#endif
-
 /* This flag is needed even when Unicode is not supported for convenience
 (it is used by the IS_NEWLINE macro). */
 
@@ -7008,9 +7014,6 @@ BOOL utf = FALSE;
 BOOL ucp = FALSE;
 BOOL allow_invalid;
 uint32_t fragment_options = 0;
-#ifdef SUPPORT_JIT
-BOOL jit_checked_utf = FALSE;
-#endif
 #endif  /* SUPPORT_UNICODE */
 
 PCRE2_SIZE frame_size;
@@ -7073,15 +7076,6 @@ options |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1)));
 #undef FF
 #undef OO
 
-/* If the pattern was successfully studied with JIT support, we will run the
-JIT executable instead of the rest of this function. Most options must be set
-at compile time for the JIT code to be usable. */
-
-#ifdef SUPPORT_JIT
-use_jit = (re->executable_jit != NULL &&
-          (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0);
-#endif
-
 /* Initialize UTF/UCP parameters. */
 
 #ifdef SUPPORT_UNICODE
@@ -7128,20 +7122,25 @@ match_data->startchar = 0;
 
 /* ============================= JIT matching ============================== */
 
-/* Prepare for JIT matching. Check a UTF string for validity unless no check is
-requested or invalid UTF can be handled. We check only the portion of the
-subject that might be be inspected during matching - from the offset minus the
-maximum lookbehind to the given length. This saves time when a small part of a
-large subject is being matched by the use of a starting offset. Note that the
-maximum lookbehind is a number of characters, not code units. */
+/* If the pattern was successfully studied with JIT support, we will run the
+JIT executable instead of the rest of this function. Most options must be set
+at compile time for the JIT code to be usable. */
 
 #ifdef SUPPORT_JIT
-if (use_jit)
+if (re->executable_jit != NULL &&
+    (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0 &&
+    PRIV(jit_check_exec)(re->executable_jit, options))
   {
+  /* Prepare for JIT matching. Check a UTF string for validity unless no check
+  is requested or invalid UTF can be handled. We check only the portion of the
+  subject that might be be inspected during matching - from the offset minus
+  the maximum lookbehind to the given length. This saves time when a small part
+  of a large subject is being matched by the use of a starting offset. Note that
+  the maximum lookbehind is a number of characters, not code units. */
+
 #ifdef SUPPORT_UNICODE
   if (utf && (options & PCRE2_NO_UTF_CHECK) == 0 && !allow_invalid)
     {
-
     /* For 8-bit and 16-bit UTF, check that the first code unit is a valid
     character start. */
 
@@ -7194,40 +7193,36 @@ if (use_jit)
       match_data->startchar += start_match - subject;
       return match_data->rc = rc;
       }
-    jit_checked_utf = TRUE;
     }
 #endif  /* SUPPORT_UNICODE */
 
-  /* If JIT returns BADOPTION, which means that the selected complete or
-  partial matching mode was not compiled, fall through to the interpreter. */
-
   rc = pcre2_jit_match(code, subject, length, start_offset, options,
     match_data, mcontext);
-  if (rc != PCRE2_ERROR_JIT_BADOPTION)
+  /* JIT must be able to perform the match. */
+  PCRE2_ASSERT(rc != PCRE2_ERROR_JIT_BADOPTION);
+
+  match_data->options = original_options;
+  if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0)
     {
-    match_data->options = original_options;
-    if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0)
+    if (length != 0)
       {
-      if (length != 0)
-        {
-        match_data->subject = match_data->memctl.malloc(CU2BYTES(length),
-          match_data->memctl.memory_data);
-        if (match_data->subject == NULL)
-          return match_data->rc = PCRE2_ERROR_NOMEMORY;
-        memcpy((void *)match_data->subject, subject, CU2BYTES(length));
-        }
-      else
-        match_data->subject = NULL;
-      match_data->flags |= PCRE2_MD_COPIED_SUBJECT;
+      match_data->subject = match_data->memctl.malloc(CU2BYTES(length),
+        match_data->memctl.memory_data);
+      if (match_data->subject == NULL)
+        return match_data->rc = PCRE2_ERROR_NOMEMORY;
+      memcpy((void *)match_data->subject, subject, CU2BYTES(length));
       }
     else
-      {
-      /* When pcre2_jit_match sets the subject, it doesn't know what the
-      original passed-in pointer was. */
-      if (match_data->subject != NULL) match_data->subject = original_subject;
-      }
-    return rc;
+      match_data->subject = NULL;
+    match_data->flags |= PCRE2_MD_COPIED_SUBJECT;
+    }
+  else
+    {
+    /* When pcre2_jit_match sets the subject, it doesn't know what the
+    original passed-in pointer was. */
+    if (match_data->subject != NULL) match_data->subject = original_subject;
     }
+  return rc;
   }
 #endif  /* SUPPORT_JIT */
 
@@ -7240,12 +7235,8 @@ this. */
 
 mb->check_subject = subject;
 
-/* If a UTF subject string was not checked for validity in the JIT code above,
-check it here, and handle support for invalid UTF strings. The check above
-happens only when invalid UTF is not supported and PCRE2_NO_CHECK_UTF is unset.
-If we get here in those circumstances, it means the subject string is valid,
-but for some reason JIT matching was not successful. There is no need to check
-the subject again.
+/* Check the validity of UTF subject strings. The check happens only when
+PCRE2_NO_CHECK_UTF is unset.
 
 We check only the portion of the subject that might be be inspected during
 matching - from the offset minus the maximum lookbehind to the given length.
@@ -7257,11 +7248,7 @@ Note also that support for invalid UTF forces a check, overriding the setting
 of PCRE2_NO_CHECK_UTF. */
 
 #ifdef SUPPORT_UNICODE
-if (utf &&
-#ifdef SUPPORT_JIT
-    !jit_checked_utf &&
-#endif
-    ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid))
+if (utf && ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid))
   {
 #if PCRE2_CODE_UNIT_WIDTH != 32
   BOOL skipped_bad_start = FALSE;
@@ -7649,7 +7636,7 @@ for(;;)
         BOOL ok = start_match < end_subject;
         if (ok)
           {
-          PCRE2_UCHAR c = UCHAR21TEST(start_match);
+          PCRE2_UCHAR c = *start_match;
           ok = has_first_cu && (c == first_cu || c == first_cu2);
           if (!ok && start_bits != NULL)
             {
@@ -7681,7 +7668,7 @@ for(;;)
 #if PCRE2_CODE_UNIT_WIDTH != 8
           PCRE2_UCHAR smc;
           while (start_match < end_subject &&
-                (smc = UCHAR21TEST(start_match)) != first_cu &&
+                (smc = *start_match) != first_cu &&
                  smc != first_cu2)
             start_match++;
 #else
@@ -7741,7 +7728,7 @@ for(;;)
         else
           {
 #if PCRE2_CODE_UNIT_WIDTH != 8
-          while (start_match < end_subject && UCHAR21TEST(start_match) !=
+          while (start_match < end_subject && *start_match !=
                  first_cu)
             start_match++;
 #else
@@ -7796,7 +7783,7 @@ for(;;)
           if (start_match[-1] == CHAR_CR &&
                (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) &&
                start_match < end_subject &&
-               UCHAR21TEST(start_match) == CHAR_NL)
+               *start_match == CHAR_NL)
             start_match++;
           }
         }
@@ -7810,7 +7797,7 @@ for(;;)
         {
         while (start_match < end_subject)
           {
-          uint32_t c = UCHAR21TEST(start_match);
+          uint32_t c = *start_match;
 #if PCRE2_CODE_UNIT_WIDTH != 8
           if (c > 255) c = 255;
 #endif
@@ -7884,7 +7871,7 @@ for(;;)
 #if PCRE2_CODE_UNIT_WIDTH != 8
             while (p < end_subject)
               {
-              uint32_t pp = UCHAR21INCTEST(p);
+              uint32_t pp = *p++;
               if (pp == req_cu || pp == req_cu2) { p--; break; }
               }
 #else  /* 8-bit code units */
@@ -7905,7 +7892,7 @@ for(;;)
 #if PCRE2_CODE_UNIT_WIDTH != 8
             while (p < end_subject)
               {
-              if (UCHAR21INCTEST(p) == req_cu) { p--; break; }
+              if (*p++ == req_cu) { p--; break; }
               }
 
 #else  /* 8-bit code units */
index f10a3fa0ddd81a3a97a62c419a0aa8d35d1cf979..725b54099b5410ba922e66ca79e75b341b7f3555 100644 (file)
@@ -166,9 +166,10 @@ const pcre2_memctl *memctl = (gcontext != NULL) ?
   &gcontext->memctl : &PRIV(default_compile_context).memctl;
 
 const uint8_t *src_bytes;
-pcre2_real_code *dst_re;
+pcre2_real_code *dst_re = NULL;
 uint8_t *tables;
 int32_t i, j;
+int32_t error;
 
 /* Sanity checks. */
 
@@ -206,7 +207,10 @@ for (i = 0; i < number_of_codes; i++)
   memcpy(&blocksize, src_bytes + offsetof(pcre2_real_code, blocksize),
     sizeof(CODE_BLOCKSIZE_TYPE));
   if (blocksize <= sizeof(pcre2_real_code))
-    return PCRE2_ERROR_BADSERIALIZEDDATA;
+    {
+    error = PCRE2_ERROR_BADSERIALIZEDDATA;
+    goto cleanup;
+    }
 
   /* The allocator provided by gcontext replaces the original one. */
 
@@ -214,13 +218,8 @@ for (i = 0; i < number_of_codes; i++)
     (pcre2_memctl *)gcontext);
   if (dst_re == NULL)
     {
-    memctl->free(tables, memctl->memory_data);
-    for (j = 0; j < i; j++)
-      {
-      memctl->free(codes[j], memctl->memory_data);
-      codes[j] = NULL;
-      }
-    return PCRE2_ERROR_NOMEMORY;
+    error = PCRE2_ERROR_NOMEMORY;
+    goto cleanup;
     }
 
   /* The new allocator must be preserved. */
@@ -230,10 +229,10 @@ for (i = 0; i < number_of_codes; i++)
   if (dst_re->magic_number != MAGIC_NUMBER ||
       dst_re->name_entry_size > MAX_NAME_SIZE + IMM2_SIZE + 1 ||
       dst_re->name_count > MAX_NAME_COUNT)
-    {
-    memctl->free(dst_re, memctl->memory_data);
-    return PCRE2_ERROR_BADSERIALIZEDDATA;
-    }
+      {
+        error = PCRE2_ERROR_BADSERIALIZEDDATA;
+        goto cleanup;
+      }
 
   /* At the moment only one table is supported. */
 
@@ -242,10 +241,22 @@ for (i = 0; i < number_of_codes; i++)
   dst_re->flags |= PCRE2_DEREF_TABLES;
 
   codes[i] = dst_re;
+  dst_re = NULL;
   src_bytes += blocksize;
   }
 
 return number_of_codes;
+
+cleanup:
+if (dst_re != NULL)
+  memctl->free(dst_re, memctl->memory_data);
+memctl->free(tables, memctl->memory_data);
+for (j = 0; j < i; j++)
+  {
+  memctl->free(codes[j], memctl->memory_data);
+  codes[j] = NULL;
+  }
+return error;
 }
 
 
index 5cb84748e0ef671b89d35152d40ba205194b667e..d512f69b68b2f0a9bef8090f8332af10ae1710ff 100644 (file)
@@ -115,6 +115,7 @@ for (; ptr < ptrend; ptr++)
     int erc;
     int errorcode;
     uint32_t ch;
+    PCRE2_SPTR esc_end_ptr;
 
     if (ptr < ptrend - 1) switch (ptr[1])
       {
@@ -137,6 +138,9 @@ for (; ptr < ptrend; ptr++)
       goto EXIT;
       }
 
+    esc_end_ptr = ptr;
+    ptr -= 1;  /* Rewind by one, because the for-loop will increment it */
+
     switch(erc)
       {
       case 0:      /* Data character */
@@ -160,7 +164,8 @@ for (; ptr < ptrend; ptr++)
 
       default:
       if (erc < 0)
-          break;  /* capture group reference */
+        break;  /* capture group reference */
+      ptr = esc_end_ptr;
       rc = PCRE2_ERROR_BADREPESCAPE;
       goto EXIT;
       }
@@ -751,6 +756,7 @@ BOOL overflowed = FALSE;
 BOOL use_existing_match;
 BOOL replacement_only;
 BOOL utf = (code->overall_options & PCRE2_UTF) != 0;
+BOOL partial = (options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0;
 PCRE2_UCHAR temp[6];
 PCRE2_UCHAR null_str[1] = { 0xcd };
 PCRE2_SPTR original_subject = subject;
@@ -778,10 +784,16 @@ if (mcontext != NULL)
   substitute_case_callout_data = mcontext->substitute_case_callout_data;
   }
 
-/* Partial matching is not valid. This must come after setting *blength to
-PCRE2_UNSET, so as not to imply an offset in the replacement. */
+/* Partial matching is supported, with limitations. We allow matching in partial
+mode, however, if a partial match is found, the substitution will fail with a
+PCRE2_ERROR_PARTIAL error. Additionally, outputting the after-match text is not
+allowed (PCRE2_ERROR_BADOPTION), and certain replacement items such as $' and $_
+are not supported (PCRE2_ERROR_PARTIALSUBS).
+
+This must come after setting *blength to PCRE2_UNSET, so as not to imply an
+offset in the replacement. */
 
-if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0)
+if (partial && (options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) == 0)
   return PCRE2_ERROR_BADOPTION;
 
 /* Validate length and find the end of the replacement. A NULL replacement of
@@ -854,7 +866,8 @@ if (use_existing_match)
   if (start_offset != match_data->start_offset)
     return PCRE2_ERROR_DIFFSUBSOFFSET;
 
-  if ((options & ~SUBSTITUTE_OPTIONS) != match_data->options)
+  if ((options & ~(SUBSTITUTE_OPTIONS|PCRE2_NO_UTF_CHECK)) !=
+      (match_data->options & ~PCRE2_NO_UTF_CHECK))
     return PCRE2_ERROR_DIFFSUBSOPTIONS;
   }
 
@@ -1119,8 +1132,16 @@ for (;;)
       if (next == CHAR_GRAVE_ACCENT || next == CHAR_APOSTROPHE)
         {
         ++ptr;
+
+        /* (Sanity-check ovector before reading from it.) */
         rc = pcre2_substring_length_bynumber(match_data, 0, &sublength);
-        if (rc < 0) goto PTREXIT; /* (Sanity-check ovector before reading from it.) */
+        /* LCOV_EXCL_START */
+        if (rc < 0)
+          {
+          PCRE2_DEBUG_UNREACHABLE();
+          goto PTREXIT;
+          }
+        /* LCOV_EXCL_STOP */
 
         if (next == CHAR_GRAVE_ACCENT)
           {
@@ -1129,6 +1150,12 @@ for (;;)
           }
         else
           {
+          if (partial)
+            {
+            rc = PCRE2_ERROR_PARTIALSUBS;
+            goto PTREXIT;
+            }
+
           subptr = subject + ovector[1];
           subptrend = subject + length;
           }
@@ -1139,12 +1166,19 @@ for (;;)
         {
         /* Java, .NET support $_ for "entire input string". */
         ++ptr;
+
+        if (partial)
+          {
+          rc = PCRE2_ERROR_PARTIALSUBS;
+          goto PTREXIT;
+          }
+
         subptr = subject;
         subptrend = subject + length;
         goto SUBPTR_SUBSTITUTE;
         }
-      else if (next == CHAR_PLUS &&
-               !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET))
+      if (next == CHAR_PLUS &&
+          !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET))
         {
         /* Perl supports $+ for "highest captured group" (not the same as $^N
         which is mainly only useful inside Perl's match callbacks). We also
index f68b464e05840e302fae55e6f3a64731d8812442..a6f5277a342ce725b1de7ebec50b48c92f0c1800 100644 (file)
@@ -210,9 +210,10 @@ PCRE2_SIZE size;
 PCRE2_UCHAR *yield;
 rc = pcre2_substring_length_bynumber(match_data, stringnumber, &size);
 if (rc < 0) return rc;
-yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) +
-  (size + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)match_data);
-if (yield == NULL) return PCRE2_ERROR_NOMEMORY;
+if (size > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / CU2BYTES(1)) - 1 ||
+    (yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) +
+      CU2BYTES(size + 1), (pcre2_memctl *)match_data)) == NULL)
+  return PCRE2_ERROR_NOMEMORY;
 yield = (PCRE2_UCHAR *)(((char *)yield) + sizeof(pcre2_memctl));
 if (size != 0) memcpy(yield, match_data->subject + match_data->ovector[stringnumber*2],
   CU2BYTES(size));
index 1cbff3afecbd2f9bc412ed12f60721774bf15c9d..7b294a8581738d671938fa02be54ac8e3fa21c5e 100644 (file)
@@ -77,9 +77,9 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = {0};
 const uint32_t PRIV(ucd_nocase_ranges_size) = 0;
 #else
 
-/* Total size: 116564 bytes, block size: 128. */
+/* Total size: 116548 bytes, block size: 128. */
 
-const char *PRIV(unicode_version) = "16.0.0";
+const char *PRIV(unicode_version) = "17.0.0";
 
 /* When recompiling tables with a new Unicode version, please check the types
 in this structure definition with those in pcre2_internal.h (the actual field
@@ -200,20 +200,21 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = {
   0x10d65, 0x10d70, /* 10 */
   0x10d85, 0x118a0, /* 2842 */
   0x118df, 0x16e40, /* 21856 */
-  0x16e7f, 0x1e900, /* 31360 */
+  0x16e7f, 0x16ea0, /* 32 */
+  0x16ed3, 0x1e900, /* 31276 */
   0x1e943, 0x110000, /* 988860 */
   0xffffffff, 0xffffffff /* terminator */
 };
 
-/* Total: 1110933 characters. */
-const uint32_t PRIV(ucd_nocase_ranges_size) = 80;
+/* Total: 1110881 characters. */
+const uint32_t PRIV(ucd_nocase_ranges_size) = 82;
 
 /* This table lists the code points for the '9' characters in each set of
 decimal digits. It is used to ensure that all the digits in a script run come
 from the same set. */
 
 const uint32_t PRIV(ucd_digit_sets)[] = {
-  76,  /* Number of subsequent values */
+  77,  /* Number of subsequent values */
   0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,
   0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,
   0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,
@@ -221,9 +222,9 @@ const uint32_t PRIV(ucd_digit_sets)[] = {
   0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x10d49,
   0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659,
   0x116c9, 0x116d9, 0x116e3, 0x11739, 0x118e9, 0x11959, 0x11bf9, 0x11c59,
-  0x11d59, 0x11da9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, 0x16d79,
-  0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9,
-  0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9,
+  0x11d59, 0x11da9, 0x11de9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59,
+  0x16d79, 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149,
+  0x1e2f9, 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9,
 };
 
 /* This vector is a list of script bitsets for the Script Extension property.
@@ -232,60 +233,60 @@ ucd_script_sets_item_size. */
 
 const uint32_t PRIV(ucd_script_sets)[] = {
  0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x40200003u, 0x00381901u, 0x00100246u, 0x00000000u,
- 0x00040305u, 0x00800000u, 0x08000000u, 0x00000000u,
+ 0x40200003u, 0x00381901u, 0x00200246u, 0x00000000u,
+ 0x00040305u, 0x00800000u, 0x10000000u, 0x00000000u,
  0x20000001u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x00000001u, 0x00800000u, 0x00000000u, 0x00000000u,
  0x00040001u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x01000007u, 0x00000840u, 0x80000200u, 0x00000000u,
- 0x01000007u, 0x00000040u, 0x80010000u, 0x00000001u,
+ 0x01000007u, 0x00000840u, 0x00000200u, 0x00000001u,
+ 0x01000007u, 0x00000040u, 0x00020000u, 0x00000003u,
  0x01000005u, 0x00002000u, 0x00000000u, 0x00000000u,
- 0x00040041u, 0x00001000u, 0x80000000u, 0x00000000u,
- 0x01000047u, 0x00002801u, 0x00010001u, 0x00000001u,
+ 0x00040041u, 0x00001000u, 0x00000000u, 0x00000001u,
+ 0x01000047u, 0x00002801u, 0x00020001u, 0x00000002u,
  0x10000001u, 0x00001801u, 0x00000004u, 0x00000000u,
- 0x00000007u, 0x00000000u, 0x00000200u, 0x00000000u,
- 0x00000051u, 0x00002840u, 0x00000202u, 0x00000001u,
- 0x0000005fu, 0x00000041u, 0x00000202u, 0x00000000u,
+ 0x00000007u, 0x00002000u, 0x00000200u, 0x00000000u,
+ 0x00000051u, 0x00002840u, 0x00000202u, 0x00000002u,
+ 0x0000005fu, 0x00002041u, 0x00000202u, 0x00000000u,
  0x00000001u, 0x00002000u, 0x00000000u, 0x00000000u,
  0x00000041u, 0x00000000u, 0x00000002u, 0x00000000u,
- 0x01000005u, 0x00000000u, 0x00010000u, 0x00000000u,
+ 0x01000005u, 0x00000000u, 0x00020000u, 0x00000000u,
  0x01000001u, 0x00000040u, 0x00000000u, 0x00000000u,
- 0x00000001u, 0x00000000u, 0x80000000u, 0x00000000u,
+ 0x00000001u, 0x00000000u, 0x00000000u, 0x00000001u,
  0x00800001u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x00000005u, 0x00000000u, 0x00000000u, 0x00000001u,
- 0x00000003u, 0x00000000u, 0x00000200u, 0x00000001u,
- 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x11000041u, 0x00000000u, 0x00000002u, 0x00000000u,
+ 0x00000005u, 0x00000000u, 0x00000000u, 0x00000002u,
+ 0x00000003u, 0x00000000u, 0x00000200u, 0x00000002u,
+ 0x11000041u, 0x00002000u, 0x00000002u, 0x00000000u,
  0x01000041u, 0x00000000u, 0x00000002u, 0x00000000u,
- 0x00000041u, 0x00000000u, 0x80000000u, 0x00000000u,
+ 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u,
+ 0x00000041u, 0x00000000u, 0x00000000u, 0x00000001u,
  0x01000041u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x01040001u, 0x00000001u, 0x80000001u, 0x00000000u,
+ 0x01040041u, 0x00000001u, 0x00000001u, 0x00000001u,
  0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x00000001u, 0x00000000u, 0x00010000u, 0x00000000u,
- 0x00000001u, 0x00000000u, 0x00000001u, 0x00000001u,
+ 0x00000001u, 0x00000000u, 0x00020000u, 0x00000000u,
+ 0x00000001u, 0x00000000u, 0x00000001u, 0x00000002u,
  0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x00000002u, 0x00000800u, 0x00000000u, 0x00000000u,
  0x00000004u, 0x00000000u, 0x00000200u, 0x00000000u,
  0x00000004u, 0x00001000u, 0x00000000u, 0x00000000u,
  0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x00200008u, 0x00001000u, 0x00000000u, 0x00000000u,
- 0x000000e0u, 0x00010000u, 0x11200000u, 0x00000000u,
+ 0x000000e0u, 0x00010000u, 0x22400000u, 0x00000000u,
  0x000000e0u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x000000e0u, 0x00010000u, 0x11208000u, 0x00000000u,
- 0x00000060u, 0x08000000u, 0x04608480u, 0x00000000u,
+ 0x000000e0u, 0x00010000u, 0x22408000u, 0x00000000u,
+ 0x00000060u, 0x08000000u, 0x08c08480u, 0x00000000u,
  0x00000060u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x000000a0u, 0x00000000u, 0x01000000u, 0x00000000u,
- 0x00000020u, 0x00000000u, 0x00200000u, 0x00000000u,
- 0x0001ff01u, 0x40000000u, 0x00001008u, 0x00000000u,
- 0x0001ff01u, 0x00000000u, 0x00001008u, 0x00000000u,
- 0x0003ff00u, 0x80004000u, 0x409c1848u, 0x00000000u,
- 0x0003ff00u, 0x80004020u, 0x609c1848u, 0x00000000u,
- 0x00000100u, 0x04000000u, 0x00080040u, 0x00000000u,
+ 0x000000a0u, 0x00000000u, 0x02000000u, 0x00000000u,
+ 0x00000020u, 0x00000000u, 0x00400000u, 0x00000000u,
+ 0x0001ff01u, 0x40000000u, 0x01011008u, 0x00000000u,
+ 0x0001ff01u, 0x00000000u, 0x00011008u, 0x00000000u,
+ 0x0003ff00u, 0x80004000u, 0x81381848u, 0x00000000u,
+ 0x0003ff00u, 0x80004020u, 0xc1381848u, 0x00000000u,
+ 0x00000100u, 0x04000000u, 0x00100040u, 0x00000000u,
  0x00000200u, 0x10004000u, 0x00000000u, 0x00000000u,
  0x00000400u, 0x00000000u, 0x00002000u, 0x00000000u,
  0x00000800u, 0x00000000u, 0x00000010u, 0x00000000u,
  0x00002000u, 0x00000000u, 0x00000008u, 0x00000000u,
- 0x00008000u, 0x00000000u, 0x00800000u, 0x00000002u,
+ 0x00008000u, 0x00000000u, 0x01000000u, 0x00000004u,
  0x00100000u, 0x10000040u, 0x00000000u, 0x00000000u,
  0x00200001u, 0x00001000u, 0x00000000u, 0x00000000u,
  0x02000000u, 0x00000000u, 0x00000000u, 0x00000000u,
@@ -294,15 +295,23 @@ const uint32_t PRIV(ucd_script_sets)[] = {
  0x00008300u, 0x00000000u, 0x00000008u, 0x00000000u,
  0x00000100u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x00008100u, 0x00000000u, 0x00000008u, 0x00000000u,
- 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u,
+ 0x00004300u, 0x00000000u, 0x00011000u, 0x00000000u,
+ 0x00004300u, 0x00000000u, 0x00000000u, 0x00000000u,
+ 0x00000100u, 0x40000000u, 0x00010000u, 0x00000000u,
+ 0x00004300u, 0x00000000u, 0x00010000u, 0x00000000u,
  0x00000100u, 0x40000000u, 0x00000000u, 0x00000000u,
  0x0001f100u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x00000100u, 0x00000000u, 0x00800000u, 0x00000000u,
- 0x0003d300u, 0x00000000u, 0x00801008u, 0x00000002u,
+ 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u,
+ 0x00000100u, 0x00000000u, 0x00011000u, 0x00000000u,
+ 0x00000100u, 0x00000000u, 0x01010000u, 0x00000000u,
+ 0x00000300u, 0x40000000u, 0x00000000u, 0x00000000u,
+ 0x00000100u, 0x00000000u, 0x00010000u, 0x00000000u,
+ 0x00000300u, 0x40000000u, 0x00010000u, 0x00000000u,
+ 0x0003d300u, 0x00000000u, 0x01001008u, 0x00000004u,
  0x00000100u, 0x00000000u, 0x00000008u, 0x00000000u,
- 0x00008100u, 0x00000000u, 0x00000008u, 0x00000002u,
+ 0x00008100u, 0x00000000u, 0x00000008u, 0x00000004u,
  0x00000200u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x00000000u, 0x00000000u, 0x00800000u, 0x00000000u,
+ 0x00000000u, 0x00000000u, 0x01000000u, 0x00000000u,
  0x00000045u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x00000040u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x04000001u, 0x00008000u, 0x00000000u, 0x00000000u,
@@ -315,7 +324,7 @@ const uint32_t PRIV(ucd_script_sets)[] = {
  0x00200000u, 0x04780000u, 0x00004000u, 0x00000000u,
  0x00000000u, 0x00000000u, 0x00000002u, 0x00000000u,
  0x00000020u, 0x00000000u, 0x0000c000u, 0x00000000u,
- 0x40000000u, 0x00000000u, 0x00020000u, 0x00000000u,
+ 0x40000000u, 0x00000000u, 0x00040000u, 0x00000000u,
  0xfc400000u, 0x00000000u, 0x00000000u, 0x00000000u,
  0xfc400000u, 0x00008000u, 0x00000000u, 0x00000000u,
  0x78400000u, 0x00000000u, 0x00000000u, 0x00000000u,
@@ -327,21 +336,21 @@ const uint32_t PRIV(ucd_script_sets)[] = {
  0x18000000u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x58000000u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x40000001u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x00018d00u, 0xc4000000u, 0x00881950u, 0x00000002u,
- 0x00008d00u, 0xc4000000u, 0x00881950u, 0x00000002u,
- 0x00000d00u, 0x84000000u, 0x00081950u, 0x00000000u,
- 0x00000d00u, 0xc4000000u, 0x00081950u, 0x00000000u,
- 0x00000300u, 0x00000000u, 0x00000000u, 0x00000002u,
+ 0x00018d00u, 0xc4000000u, 0x01101950u, 0x00000004u,
+ 0x00008d00u, 0xc4000000u, 0x01101950u, 0x00000004u,
+ 0x00000d00u, 0x84000000u, 0x00101950u, 0x00000000u,
+ 0x00000d00u, 0xc4000000u, 0x00101950u, 0x00000000u,
+ 0x00000300u, 0x00000000u, 0x00000000u, 0x00000004u,
  0x00002100u, 0x00000000u, 0x00000000u, 0x00000000u,
  0x00100001u, 0x00020000u, 0x00000000u, 0x00000000u,
  0x00000000u, 0x01000400u, 0x00000000u, 0x00000000u,
  0x00000020u, 0x00010000u, 0x00000000u, 0x00000000u,
  0x000000a0u, 0x00000000u, 0x00000000u, 0x00000000u,
- 0x00000000u, 0x00000280u, 0x02000000u, 0x00000000u,
+ 0x00000000u, 0x00000280u, 0x04000000u, 0x00000000u,
  0x00000000u, 0x00000280u, 0x00000000u, 0x00000000u,
  0x00000000u, 0x00000280u, 0x00000020u, 0x00000000u,
  0x00000020u, 0x00000800u, 0x00000000u, 0x00000000u,
- 0x00000000u, 0x00000000u, 0x04000080u, 0x00000000u,
+ 0x00000000u, 0x00000000u, 0x08000080u, 0x00000000u,
 };
 
 /* This vector is a list of bitsets for Boolean properties. The number of
@@ -444,6 +453,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = {
  0x00802004u, 0x01800003u,
  0x00800344u, 0x01900003u,
  0x03008000u, 0x00800009u,
+ 0x00804004u, 0x0180000bu,
  0x00c00000u, 0x00000000u,
  0x01002020u, 0x00a00009u,
  0x01000024u, 0x0180000bu,
@@ -451,7 +461,6 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = {
  0x01408024u, 0x00800009u,
  0x00808000u, 0x00000000u,
  0x00800044u, 0x01820043u,
- 0x00800064u, 0x01820043u,
  0x01002020u, 0x00800011u,
  0x00022020u, 0x00800019u,
  0x00002028u, 0x00000800u,
@@ -467,6 +476,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = {
  0x00002020u, 0x00000080u,
  0x00002000u, 0x00000000u,
  0x00006020u, 0x00000000u,
+ 0x00800064u, 0x01820043u,
  0x40800000u, 0x00000080u,
  0x40801000u, 0x00000080u,
  0x40800010u, 0x00000080u,
@@ -485,13 +495,11 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = {
  0x00801000u, 0x00000480u,
  0x00b10000u, 0x00000400u,
  0x00804010u, 0x00000400u,
- 0x00a00000u, 0x00000400u,
  0x00000000u, 0x00000400u,
  0x008003c4u, 0x00100000u,
  0x00a103c4u, 0x00100000u,
  0x00800d44u, 0x00000040u,
  0x00b10000u, 0x00000480u,
- 0x00a00000u, 0x00000480u,
  0x00a90000u, 0x00000400u,
  0x00b90000u, 0x00000400u,
  0x03000020u, 0x00800009u,
@@ -528,9 +536,9 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = {
  0x01400020u, 0x00800009u,
  0x01000020u, 0x0080000du,
  0x01008004u, 0x00800009u,
+ 0x00c00024u, 0x01800007u,
  0x01000000u, 0x00800009u,
  0xc0800000u, 0x00000080u,
- 0x00a00000u, 0x00000000u,
  0x00b10000u, 0x00000000u,
  0x00200000u, 0x00000000u,
  0x00800044u, 0x00100000u,
@@ -549,66 +557,66 @@ offset to multichar other cases or zero (8 bits), offset to other case or zero
 (32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed
 into a 16-bit field, and offset in binary properties table (16 bits). */
 
-const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */
-  {    99,      0,      2,      0,      0,   6144,      2, }, /*   0 */
-  {    99,      0,      2,      0,      0,  43008,      4, }, /*   1 */
-  {    99,      0,      1,      0,      0,   4096,      4, }, /*   2 */
-  {    99,      0,      2,      0,      0,  45056,      4, }, /*   3 */
-  {    99,      0,      0,      0,      0,   4096,      4, }, /*   4 */
-  {    99,      0,      2,      0,      0,   4096,      2, }, /*   5 */
-  {    99,      0,      2,      0,      0,  43008,      2, }, /*   6 */
-  {    99,     29,     12,      0,      0,  45056,      6, }, /*   7 */
-  {    99,     21,     12,      0,      0,  28672,      8, }, /*   8 */
-  {    99,     21,     12,      0,      0,  28672,     10, }, /*   9 */
-  {    99,     21,     12,      0,      0,  14336,     12, }, /*  10 */
-  {    99,     23,     12,      0,      0,  14336,     14, }, /*  11 */
-  {    99,     21,     12,      0,      0,  14336,     14, }, /*  12 */
-  {    99,     21,     12,      0,      0,  28672,     14, }, /*  13 */
-  {    99,     21,     12,      0,      0,  28672,     16, }, /*  14 */
-  {    99,     22,     12,      0,      0,  28672,     18, }, /*  15 */
-  {    99,     18,     12,      0,      0,  28672,     18, }, /*  16 */
-  {    99,     21,     12,      0,      0,  28672,     12, }, /*  17 */
-  {    99,     25,     12,      0,      0,  12288,     20, }, /*  18 */
-  {    99,     21,     12,      0,      0,   8192,     22, }, /*  19 */
-  {    99,     17,     12,      0,      0,  12288,     24, }, /*  20 */
-  {    99,     21,     12,      0,      0,   8192,     26, }, /*  21 */
-  {    99,     21,     12,      0,      0,   8192,     14, }, /*  22 */
-  {    99,     13,     12,      0,      0,  10240,     28, }, /*  23 */
-  {    99,     21,     12,      0,      0,   8192,     30, }, /*  24 */
-  {    99,     21,     12,      0,      0,  28672,     22, }, /*  25 */
-  {    99,     25,     12,      0,      0,  28672,     32, }, /*  26 */
-  {    99,     25,     12,      0,      0,  28672,     20, }, /*  27 */
+const ucd_record PRIV(ucd_records)[] = { /* 18756 bytes, record size 12 */
+  {   100,      0,      2,      0,      0,   6144,      2, }, /*   0 */
+  {   100,      0,      2,      0,      0,  43008,      4, }, /*   1 */
+  {   100,      0,      1,      0,      0,   4096,      4, }, /*   2 */
+  {   100,      0,      2,      0,      0,  45056,      4, }, /*   3 */
+  {   100,      0,      0,      0,      0,   4096,      4, }, /*   4 */
+  {   100,      0,      2,      0,      0,   4096,      2, }, /*   5 */
+  {   100,      0,      2,      0,      0,  43008,      2, }, /*   6 */
+  {   100,     29,     12,      0,      0,  45056,      6, }, /*   7 */
+  {   100,     21,     12,      0,      0,  28672,      8, }, /*   8 */
+  {   100,     21,     12,      0,      0,  28672,     10, }, /*   9 */
+  {   100,     21,     12,      0,      0,  14336,     12, }, /*  10 */
+  {   100,     23,     12,      0,      0,  14336,     14, }, /*  11 */
+  {   100,     21,     12,      0,      0,  14336,     14, }, /*  12 */
+  {   100,     21,     12,      0,      0,  28672,     14, }, /*  13 */
+  {   100,     21,     12,      0,      0,  28672,     16, }, /*  14 */
+  {   100,     22,     12,      0,      0,  28672,     18, }, /*  15 */
+  {   100,     18,     12,      0,      0,  28672,     18, }, /*  16 */
+  {   100,     21,     12,      0,      0,  28672,     12, }, /*  17 */
+  {   100,     25,     12,      0,      0,  12288,     20, }, /*  18 */
+  {   100,     21,     12,      0,      0,   8192,     22, }, /*  19 */
+  {   100,     17,     12,      0,      0,  12288,     24, }, /*  20 */
+  {   100,     21,     12,      0,      0,   8192,     26, }, /*  21 */
+  {   100,     21,     12,      0,      0,   8192,     14, }, /*  22 */
+  {   100,     13,     12,      0,      0,  10240,     28, }, /*  23 */
+  {   100,     21,     12,      0,      0,   8192,     30, }, /*  24 */
+  {   100,     21,     12,      0,      0,  28672,     22, }, /*  25 */
+  {   100,     25,     12,      0,      0,  28672,     32, }, /*  26 */
+  {   100,     25,     12,      0,      0,  28672,     20, }, /*  27 */
   {     0,      9,     12,      0,     32,  18432,     34, }, /*  28 */
   {     0,      9,     12,      0,     32,  18432,     36, }, /*  29 */
   {     0,      9,     12,    100,     32,  18432,     36, }, /*  30 */
   {     0,      9,     12,      1,     32,  18432,     36, }, /*  31 */
-  {    99,     24,     12,      0,      0,  28672,     38, }, /*  32 */
-  {    99,     16,     12,      0,      0,  28672,     40, }, /*  33 */
-  {    99,     24,     12,      0,      0,  28672,     42, }, /*  34 */
+  {   100,     24,     12,      0,      0,  28672,     38, }, /*  32 */
+  {   100,     16,     12,      0,      0,  28672,     40, }, /*  33 */
+  {   100,     24,     12,      0,      0,  28672,     42, }, /*  34 */
   {     0,      5,     12,      0,    -32,  18432,     44, }, /*  35 */
   {     0,      5,     12,      0,    -32,  18432,     46, }, /*  36 */
   {     0,      5,     12,      0,    -32,  18432,     48, }, /*  37 */
   {     0,      5,     12,    100,    -32,  18432,     46, }, /*  38 */
   {     0,      5,     12,      1,    -32,  18432,     46, }, /*  39 */
-  {    99,      0,      2,      0,      0,   6144,      0, }, /*  40 */
-  {    99,      0,      2,      0,      0,   4096,     50, }, /*  41 */
-  {    99,     29,     12,      0,      0,   8192,     52, }, /*  42 */
-  {    99,     21,     12,      0,      0,  28672,     54, }, /*  43 */
-  {    99,     23,     12,      0,      0,  14336,     54, }, /*  44 */
-  {    99,     26,     12,      0,      0,  28672,     54, }, /*  45 */
-  {    99,     24,     12,      0,      0,  28672,     56, }, /*  46 */
-  {    99,     26,     14,      0,      0,  28672,     58, }, /*  47 */
+  {   100,      0,      2,      0,      0,   6144,      0, }, /*  40 */
+  {   100,      0,      2,      0,      0,   4096,     50, }, /*  41 */
+  {   100,     29,     12,      0,      0,   8192,     52, }, /*  42 */
+  {   100,     21,     12,      0,      0,  28672,     54, }, /*  43 */
+  {   100,     23,     12,      0,      0,  14336,     54, }, /*  44 */
+  {   100,     26,     12,      0,      0,  28672,     54, }, /*  45 */
+  {   100,     24,     12,      0,      0,  28672,     56, }, /*  46 */
+  {   100,     26,     14,      0,      0,  28672,     58, }, /*  47 */
   {     0,      7,     12,      0,      0,  18432,     60, }, /*  48 */
-  {    99,     20,     12,      0,      0,  28672,     62, }, /*  49 */
-  {    99,     25,     12,      0,      0,  28672,     64, }, /*  50 */
-  {    99,      1,      2,      0,      0,   6144,     66, }, /*  51 */
-  {    99,     26,     12,      0,      0,  14336,     54, }, /*  52 */
-  {    99,     25,     12,      0,      0,  14336,     64, }, /*  53 */
-  {    99,     15,     12,      0,      0,  10240,     68, }, /*  54 */
-  {    99,      5,     12,     26,    775,  18432,     70, }, /*  55 */
-  {    99,     21,     12,      0,      0,  28676,     72, }, /*  56 */
-  {    99,     19,     12,      0,      0,  28672,     62, }, /*  57 */
-  {    99,     15,     12,      0,      0,  28672,     74, }, /*  58 */
+  {   100,     20,     12,      0,      0,  28672,     62, }, /*  49 */
+  {   100,     25,     12,      0,      0,  28672,     64, }, /*  50 */
+  {   100,      1,      2,      0,      0,   6144,     66, }, /*  51 */
+  {   100,     26,     12,      0,      0,  14336,     54, }, /*  52 */
+  {   100,     25,     12,      0,      0,  14336,     64, }, /*  53 */
+  {   100,     15,     12,      0,      0,  10240,     68, }, /*  54 */
+  {   100,      5,     12,     26,    775,  18432,     70, }, /*  55 */
+  {   100,     21,     12,      0,      0,  28676,     72, }, /*  56 */
+  {   100,     19,     12,      0,      0,  28672,     62, }, /*  57 */
+  {   100,     15,     12,      0,      0,  28672,     74, }, /*  58 */
   {     0,      9,     12,      0,     32,  18432,     76, }, /*  59 */
   {     0,      9,     12,    104,     32,  18432,     76, }, /*  60 */
   {     0,      5,     12,      0,   7615,  18432,     70, }, /*  61 */
@@ -701,59 +709,59 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */
   {     0,      5,     12,      0,  42258,  18432,     78, }, /* 148 */
   {     0,      6,     12,      0,      0,  18432,     90, }, /* 149 */
   {     0,      6,     12,      0,      0,  18432,     92, }, /* 150 */
-  {    99,      6,     12,      0,      0,  28672,     94, }, /* 151 */
-  {    99,      6,     12,      0,      0,  18432,     94, }, /* 152 */
-  {    99,      6,     12,      0,      0,  18440,     94, }, /* 153 */
-  {    99,      6,     12,      0,      0,  18432,     90, }, /* 154 */
-  {    99,      6,     12,      0,      0,  28684,     94, }, /* 155 */
-  {    99,      6,     12,      0,      0,  28688,     94, }, /* 156 */
-  {    99,      6,     12,      0,      0,  18432,     96, }, /* 157 */
-  {    99,     24,     12,      0,      0,  28692,     56, }, /* 158 */
-  {    99,     24,     12,      0,      0,  28684,     56, }, /* 159 */
+  {   100,      6,     12,      0,      0,  28672,     94, }, /* 151 */
+  {   100,      6,     12,      0,      0,  18432,     94, }, /* 152 */
+  {   100,      6,     12,      0,      0,  18440,     94, }, /* 153 */
+  {   100,      6,     12,      0,      0,  18432,     90, }, /* 154 */
+  {   100,      6,     12,      0,      0,  28684,     94, }, /* 155 */
+  {   100,      6,     12,      0,      0,  28688,     94, }, /* 156 */
+  {   100,      6,     12,      0,      0,  18432,     96, }, /* 157 */
+  {   100,     24,     12,      0,      0,  28692,     56, }, /* 158 */
+  {   100,     24,     12,      0,      0,  28684,     56, }, /* 159 */
   {    29,     24,     12,      0,      0,  28672,     56, }, /* 160 */
-  {   106,     12,      3,      0,      0,  26648,     98, }, /* 161 */
-  {   106,     12,      3,      0,      0,  26652,     98, }, /* 162 */
-  {   106,     12,      3,      0,      0,  26656,     98, }, /* 163 */
-  {   106,     12,      3,      0,      0,  26660,     98, }, /* 164 */
-  {   106,     12,      3,      0,      0,  26664,     98, }, /* 165 */
-  {   106,     12,      3,      0,      0,  26668,     98, }, /* 166 */
-  {   106,     12,      3,      0,      0,  26672,     98, }, /* 167 */
-  {   106,     12,      3,      0,      0,  26676,     98, }, /* 168 */
-  {   106,     12,      3,      0,      0,  26680,     98, }, /* 169 */
-  {   106,     12,      3,      0,      0,  26684,     98, }, /* 170 */
-  {   106,     12,      3,      0,      0,  26688,     98, }, /* 171 */
-  {   106,     12,      3,      0,      0,  26692,     98, }, /* 172 */
-  {   106,     12,      3,      0,      0,  26696,     98, }, /* 173 */
-  {   106,     12,      3,      0,      0,  26700,     98, }, /* 174 */
-  {   106,     12,      3,      0,      0,  26704,     98, }, /* 175 */
-  {   106,     12,      3,      0,      0,  26624,     98, }, /* 176 */
-  {   106,     12,      3,      0,      0,  26708,     98, }, /* 177 */
-  {   106,     12,      3,      0,      0,  26712,     98, }, /* 178 */
-  {   106,     12,      3,      0,      0,  26716,     98, }, /* 179 */
-  {   106,     12,      3,      0,      0,  26720,     98, }, /* 180 */
-  {   106,     12,      3,      0,      0,  26724,     98, }, /* 181 */
-  {   106,     12,      3,      0,      0,  26728,     98, }, /* 182 */
-  {   106,     12,      3,      0,      0,  26732,     98, }, /* 183 */
-  {   106,     12,      3,      0,      0,  26736,     98, }, /* 184 */
-  {   106,     12,      3,      0,      0,  26740,     98, }, /* 185 */
-  {   106,     12,      3,     21,    116,  26740,    100, }, /* 186 */
-  {   106,     12,      3,      0,      0,  26624,    102, }, /* 187 */
-  {   106,     12,      3,      0,      0,  26744,    104, }, /* 188 */
-  {   106,     12,      3,      0,      0,  26624,    104, }, /* 189 */
-  {   106,     12,      3,      0,      0,  26748,     98, }, /* 190 */
-  {   106,     12,      3,      0,      0,  26752,    106, }, /* 191 */
+  {   107,     12,      3,      0,      0,  26648,     98, }, /* 161 */
+  {   107,     12,      3,      0,      0,  26652,     98, }, /* 162 */
+  {   107,     12,      3,      0,      0,  26656,     98, }, /* 163 */
+  {   107,     12,      3,      0,      0,  26660,     98, }, /* 164 */
+  {   107,     12,      3,      0,      0,  26664,     98, }, /* 165 */
+  {   107,     12,      3,      0,      0,  26668,     98, }, /* 166 */
+  {   107,     12,      3,      0,      0,  26672,     98, }, /* 167 */
+  {   107,     12,      3,      0,      0,  26676,     98, }, /* 168 */
+  {   107,     12,      3,      0,      0,  26680,     98, }, /* 169 */
+  {   107,     12,      3,      0,      0,  26684,     98, }, /* 170 */
+  {   107,     12,      3,      0,      0,  26688,     98, }, /* 171 */
+  {   107,     12,      3,      0,      0,  26692,     98, }, /* 172 */
+  {   107,     12,      3,      0,      0,  26696,     98, }, /* 173 */
+  {   107,     12,      3,      0,      0,  26700,     98, }, /* 174 */
+  {   107,     12,      3,      0,      0,  26704,     98, }, /* 175 */
+  {   107,     12,      3,      0,      0,  26624,     98, }, /* 176 */
+  {   107,     12,      3,      0,      0,  26708,     98, }, /* 177 */
+  {   107,     12,      3,      0,      0,  26712,     98, }, /* 178 */
+  {   107,     12,      3,      0,      0,  26716,     98, }, /* 179 */
+  {   107,     12,      3,      0,      0,  26720,     98, }, /* 180 */
+  {   107,     12,      3,      0,      0,  26724,     98, }, /* 181 */
+  {   107,     12,      3,      0,      0,  26728,     98, }, /* 182 */
+  {   107,     12,      3,      0,      0,  26732,     98, }, /* 183 */
+  {   107,     12,      3,      0,      0,  26736,     98, }, /* 184 */
+  {   107,     12,      3,      0,      0,  26740,     98, }, /* 185 */
+  {   107,     12,      3,     21,    116,  26740,    100, }, /* 186 */
+  {   107,     12,      3,      0,      0,  26624,    102, }, /* 187 */
+  {   107,     12,      3,      0,      0,  26744,    104, }, /* 188 */
+  {   107,     12,      3,      0,      0,  26624,    104, }, /* 189 */
+  {   107,     12,      3,      0,      0,  26748,     98, }, /* 190 */
+  {   107,     12,      3,      0,      0,  26752,    106, }, /* 191 */
   {     1,      9,     12,      0,      1,  18432,     76, }, /* 192 */
   {     1,      5,     12,      0,     -1,  18432,     78, }, /* 193 */
-  {    99,      6,     12,      0,      0,  28804,     94, }, /* 194 */
+  {   100,      6,     12,      0,      0,  28804,     94, }, /* 194 */
   {     1,     24,     12,      0,      0,  28804,     56, }, /* 195 */
-  {    98,      2,     12,      0,      0,  18432,      0, }, /* 196 */
+  {    99,      2,     12,      0,      0,  18432,      0, }, /* 196 */
   {     1,      6,     12,      0,      0,  18432,    108, }, /* 197 */
   {     1,      5,     12,      0,    130,  18432,     78, }, /* 198 */
-  {    99,     21,     12,      0,      0,  28672,    110, }, /* 199 */
+  {   100,     21,     12,      0,      0,  28672,    110, }, /* 199 */
   {     1,      9,     12,      0,    116,  18432,     76, }, /* 200 */
   {     1,     24,     12,      0,      0,  28672,     56, }, /* 201 */
   {     1,      9,     12,      0,     38,  18432,     76, }, /* 202 */
-  {    99,     21,     12,      0,      0,  28672,    112, }, /* 203 */
+  {   100,     21,     12,      0,      0,  28672,    112, }, /* 203 */
   {     1,      9,     12,      0,     37,  18432,     76, }, /* 204 */
   {     1,      9,     12,      0,     64,  18432,     76, }, /* 205 */
   {     1,      9,     12,      0,     63,  18432,     76, }, /* 206 */
@@ -832,7 +840,7 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */
   {     2,     26,     12,      0,      0,  18432,     74, }, /* 279 */
   {     2,     12,      3,      0,      0,  26760,     98, }, /* 280 */
   {     2,     12,      3,      0,      0,  26764,     98, }, /* 281 */
-  {   106,     12,      3,      0,      0,  26768,     98, }, /* 282 */
+  {   107,     12,      3,      0,      0,  26768,     98, }, /* 282 */
   {     2,     11,      3,      0,      0,  26624,    124, }, /* 283 */
   {     2,      9,     12,      0,     15,  18432,     76, }, /* 284 */
   {     2,      5,     12,      0,    -15,  18432,     78, }, /* 285 */
@@ -847,1252 +855,1272 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */
   {     3,     17,     12,      0,      0,  28672,    130, }, /* 294 */
   {     3,     26,     12,      0,      0,  28672,     74, }, /* 295 */
   {     3,     23,     12,      0,      0,  14336,     74, }, /* 296 */
-  {    98,      2,     12,      0,      0,  34816,      0, }, /* 297 */
+  {    99,      2,     12,      0,      0,  34816,      0, }, /* 297 */
   {     4,     12,      3,      0,      0,  26624,     98, }, /* 298 */
-  {     4,     12,      3,      0,      0,  26624,    104, }, /* 299 */
-  {     4,     12,      3,      0,      0,  26624,    132, }, /* 300 */
-  {     4,     17,     12,      0,      0,  34816,    130, }, /* 301 */
-  {     4,     21,     12,      0,      0,  34816,     74, }, /* 302 */
-  {     4,     21,     12,      0,      0,  34816,    110, }, /* 303 */
-  {     4,     12,      3,      0,      0,  26624,    106, }, /* 304 */
-  {     4,      7,     12,      0,      0,  34816,     84, }, /* 305 */
-  {     4,     21,     12,      0,      0,  34816,    126, }, /* 306 */
-  {     5,      1,      4,      0,      0,   2048,    134, }, /* 307 */
-  {    99,      1,      4,      0,      0,   2048,    134, }, /* 308 */
-  {     5,     25,     12,      0,      0,  28672,    122, }, /* 309 */
-  {     5,     25,     12,      0,      0,      0,    122, }, /* 310 */
-  {     5,     21,     12,      0,      0,  14336,     74, }, /* 311 */
-  {     5,     23,     12,      0,      0,      0,     74, }, /* 312 */
-  {    99,     21,     12,      0,      0,   8344,    110, }, /* 313 */
-  {     5,     21,     12,      0,      0,      0,     74, }, /* 314 */
-  {     5,     26,     12,      0,      0,  28672,     74, }, /* 315 */
-  {     5,     12,      3,      0,      0,  26624,    106, }, /* 316 */
-  {    99,     21,     12,      0,      0,    152,    110, }, /* 317 */
-  {     5,      1,      2,      0,      0,    156,    136, }, /* 318 */
-  {     5,     21,     12,      0,      0,      0,    128, }, /* 319 */
-  {    99,     21,     12,      0,      0,    160,    128, }, /* 320 */
-  {     5,      7,     12,      0,      0,      0,     84, }, /* 321 */
-  {    99,      6,     12,      0,      0,    164,    138, }, /* 322 */
-  {   106,     12,      3,      0,      0,  26792,    132, }, /* 323 */
-  {   106,     12,      3,      0,      0,  26792,    106, }, /* 324 */
-  {   106,     12,      3,      0,      0,  26792,    140, }, /* 325 */
-  {     5,     12,      3,      0,      0,  26624,    132, }, /* 326 */
-  {     5,     12,      3,      0,      0,  26624,    142, }, /* 327 */
-  {     5,     13,     12,      0,      0,   2220,    144, }, /* 328 */
-  {     5,     21,     12,      0,      0,   2048,     74, }, /* 329 */
-  {     5,      7,     12,      0,      0,      0,    146, }, /* 330 */
-  {     5,     21,     12,      0,      0,    176,    128, }, /* 331 */
-  {     5,     12,      3,      0,      0,  26624,    140, }, /* 332 */
-  {     5,     12,      3,      0,      0,  26624,     98, }, /* 333 */
-  {     5,      6,     12,      0,      0,      0,     94, }, /* 334 */
-  {     5,     13,     12,      0,      0,  10240,    144, }, /* 335 */
-  {     5,     26,     12,      0,      0,      0,     74, }, /* 336 */
-  {     6,     21,     12,      0,      0,      0,    128, }, /* 337 */
-  {     6,     21,     12,      0,      0,      0,    110, }, /* 338 */
-  {     6,     21,     12,      0,      0,      0,     74, }, /* 339 */
-  {    98,      2,     12,      0,      0,      0,      0, }, /* 340 */
-  {     6,      1,      4,      0,      0,      0,    134, }, /* 341 */
-  {     6,      7,     12,      0,      0,      0,     84, }, /* 342 */
-  {     6,     12,      3,      0,      0,  26624,    106, }, /* 343 */
-  {     6,     12,      3,      0,      0,  26624,    132, }, /* 344 */
-  {     6,     12,      3,      0,      0,  26624,     98, }, /* 345 */
-  {     7,      7,     12,      0,      0,      0,     84, }, /* 346 */
-  {     7,     12,      3,      0,      0,  26624,    132, }, /* 347 */
-  {    48,     13,     12,      0,      0,  34816,    144, }, /* 348 */
-  {    48,      7,     12,      0,      0,  34816,     84, }, /* 349 */
-  {    48,     12,      3,      0,      0,  26624,     98, }, /* 350 */
-  {    48,      6,     12,      0,      0,  34816,     94, }, /* 351 */
-  {    48,     26,     12,      0,      0,  28672,     74, }, /* 352 */
-  {    48,     21,     12,      0,      0,  28672,     74, }, /* 353 */
-  {    48,     21,     12,      0,      0,  28672,    110, }, /* 354 */
-  {    48,     21,     12,      0,      0,  28672,    128, }, /* 355 */
-  {    48,      6,     12,      0,      0,  34816,    138, }, /* 356 */
-  {    48,     12,      3,      0,      0,  26624,    104, }, /* 357 */
-  {    48,     23,     12,      0,      0,  34816,     74, }, /* 358 */
-  {    54,      7,     12,      0,      0,  34816,     84, }, /* 359 */
-  {    54,     12,      3,      0,      0,  26624,    106, }, /* 360 */
-  {    54,     12,      3,      0,      0,  26624,     98, }, /* 361 */
-  {    54,      6,     12,      0,      0,  34816,    148, }, /* 362 */
-  {    54,     12,      3,      0,      0,  26624,    104, }, /* 363 */
-  {    54,     21,     12,      0,      0,  34816,    110, }, /* 364 */
-  {    54,     21,     12,      0,      0,  34816,     74, }, /* 365 */
-  {    54,     21,     12,      0,      0,  34816,    128, }, /* 366 */
-  {    59,      7,     12,      0,      0,  34816,     84, }, /* 367 */
-  {    59,     12,      3,      0,      0,  26624,    104, }, /* 368 */
-  {    59,     21,     12,      0,      0,  34816,    110, }, /* 369 */
-  {     5,     24,     12,      0,      0,      0,    126, }, /* 370 */
-  {     5,     12,      3,      0,      0,  26624,    150, }, /* 371 */
-  {     5,     12,      3,      0,      0,  26624,    104, }, /* 372 */
-  {     5,     12,      3,      0,      0,  26624,    152, }, /* 373 */
-  {     8,     12,      3,      0,      0,  26624,    106, }, /* 374 */
-  {     8,     10,      5,      0,      0,  18432,    154, }, /* 375 */
-  {     8,      7,     12,      0,      0,  18432,     84, }, /* 376 */
-  {     8,      7,     12,      0,      0,  18432,    156, }, /* 377 */
-  {     8,     12,      3,      0,      0,  26624,     98, }, /* 378 */
-  {     8,     12,      3,      0,      0,  26624,    158, }, /* 379 */
-  {   106,     12,      3,      0,      0,  26804,     98, }, /* 380 */
-  {   106,     12,      3,      0,      0,  26808,     98, }, /* 381 */
-  {    99,     21,     12,      0,      0,  18620,    128, }, /* 382 */
-  {    99,     21,     12,      0,      0,  18624,    128, }, /* 383 */
-  {     8,     13,     12,      0,      0,  18628,    144, }, /* 384 */
-  {     8,     21,     12,      0,      0,  18432,     74, }, /* 385 */
-  {     8,      6,     12,      0,      0,  18432,     94, }, /* 386 */
-  {     9,      7,     12,      0,      0,  18432,     84, }, /* 387 */
-  {     9,     12,      3,      0,      0,  26624,    106, }, /* 388 */
-  {     9,     10,      5,      0,      0,  18432,    154, }, /* 389 */
-  {     9,      7,     12,      0,      0,  18432,    156, }, /* 390 */
-  {     9,     12,      3,      0,      0,  26624,     98, }, /* 391 */
-  {     9,     10,      3,      0,      0,  18432,    160, }, /* 392 */
-  {     9,     12,      3,      0,      0,  26624,    158, }, /* 393 */
-  {     9,     13,     12,      0,      0,  18632,    144, }, /* 394 */
-  {     9,     23,     12,      0,      0,  14336,     74, }, /* 395 */
-  {     9,     15,     12,      0,      0,  18432,     74, }, /* 396 */
-  {     9,     26,     12,      0,      0,  18432,     74, }, /* 397 */
-  {     9,     21,     12,      0,      0,  18432,     74, }, /* 398 */
-  {     9,     12,      3,      0,      0,  26624,    104, }, /* 399 */
-  {    10,     12,      3,      0,      0,  26624,    106, }, /* 400 */
-  {    10,     10,      5,      0,      0,  18432,    154, }, /* 401 */
-  {    10,      7,     12,      0,      0,  18432,     84, }, /* 402 */
-  {    10,     12,      3,      0,      0,  26624,     98, }, /* 403 */
-  {    10,     12,      3,      0,      0,  26624,    158, }, /* 404 */
-  {    10,     13,     12,      0,      0,  18636,    144, }, /* 405 */
-  {    10,     12,      3,      0,      0,  26624,    162, }, /* 406 */
-  {    10,     21,     12,      0,      0,  18432,     74, }, /* 407 */
-  {    11,     12,      3,      0,      0,  26624,    106, }, /* 408 */
-  {    11,     10,      5,      0,      0,  18432,    154, }, /* 409 */
-  {    11,      7,     12,      0,      0,  18432,     84, }, /* 410 */
-  {    11,      7,     12,      0,      0,  18432,    156, }, /* 411 */
-  {    11,     12,      3,      0,      0,  26624,     98, }, /* 412 */
-  {    11,     12,      3,      0,      0,  26624,    158, }, /* 413 */
-  {    11,     13,     12,      0,      0,  18640,    144, }, /* 414 */
-  {    11,     21,     12,      0,      0,  18432,     74, }, /* 415 */
-  {    11,     23,     12,      0,      0,  14336,     74, }, /* 416 */
-  {    11,     12,      3,      0,      0,  26624,    162, }, /* 417 */
-  {    12,     12,      3,      0,      0,  26624,    106, }, /* 418 */
-  {    12,     10,      5,      0,      0,  18432,    154, }, /* 419 */
-  {    12,      7,     12,      0,      0,  18432,     84, }, /* 420 */
-  {    12,      7,     12,      0,      0,  18432,    156, }, /* 421 */
-  {    12,     12,      3,      0,      0,  26624,     98, }, /* 422 */
-  {    12,     10,      3,      0,      0,  18432,    160, }, /* 423 */
-  {    12,     12,      3,      0,      0,  26624,    158, }, /* 424 */
-  {    12,     12,      3,      0,      0,  26624,    164, }, /* 425 */
-  {    12,     13,     12,      0,      0,  18432,    144, }, /* 426 */
-  {    12,     26,     12,      0,      0,  18432,     74, }, /* 427 */
-  {    12,     15,     12,      0,      0,  18432,     74, }, /* 428 */
-  {    13,     12,      3,      0,      0,  26624,    106, }, /* 429 */
-  {    13,      7,     12,      0,      0,  18432,     84, }, /* 430 */
-  {    13,     10,      3,      0,      0,  18432,    160, }, /* 431 */
-  {    13,     10,      5,      0,      0,  18432,    154, }, /* 432 */
-  {    13,     12,      3,      0,      0,  26624,    158, }, /* 433 */
-  {    13,     13,     12,      0,      0,  18644,    144, }, /* 434 */
-  {    13,     15,     12,      0,      0,  18644,     74, }, /* 435 */
-  {    13,     26,     12,      0,      0,  28884,     74, }, /* 436 */
-  {    13,     26,     12,      0,      0,  28672,     74, }, /* 437 */
-  {    13,     23,     12,      0,      0,  14336,     74, }, /* 438 */
-  {    14,     12,      3,      0,      0,  26624,    106, }, /* 439 */
-  {    14,     10,      5,      0,      0,  18432,    154, }, /* 440 */
-  {    14,      7,     12,      0,      0,  18432,     84, }, /* 441 */
-  {    14,      7,     12,      0,      0,  18432,    156, }, /* 442 */
-  {    14,     12,      3,      0,      0,  26624,     98, }, /* 443 */
-  {    14,     12,      3,      0,      0,  26624,    158, }, /* 444 */
-  {    14,     13,     12,      0,      0,  18432,    144, }, /* 445 */
-  {    14,     21,     12,      0,      0,  18432,     74, }, /* 446 */
-  {    14,     15,     12,      0,      0,  28672,     74, }, /* 447 */
-  {    14,     26,     12,      0,      0,  18432,     74, }, /* 448 */
-  {    15,      7,     12,      0,      0,  18432,     84, }, /* 449 */
-  {    15,     12,      3,      0,      0,  26624,    106, }, /* 450 */
-  {    15,     10,      5,      0,      0,  18432,    154, }, /* 451 */
-  {    15,     21,     12,      0,      0,  18432,     74, }, /* 452 */
-  {    15,     12,      3,      0,      0,  26624,     98, }, /* 453 */
-  {    15,     12,      3,      0,      0,  18432,    106, }, /* 454 */
-  {    15,     10,      3,      0,      0,  18432,    160, }, /* 455 */
-  {    15,     12,      3,      0,      0,  26624,    158, }, /* 456 */
-  {    15,     13,     12,      0,      0,  18648,    144, }, /* 457 */
-  {    16,     12,      3,      0,      0,  26624,    106, }, /* 458 */
-  {    16,     10,      5,      0,      0,  18432,    154, }, /* 459 */
-  {    16,      7,     12,      0,      0,  18432,     84, }, /* 460 */
-  {    16,      7,     12,      0,      0,  18432,    156, }, /* 461 */
-  {    16,     12,      3,      0,      0,  26624,    158, }, /* 462 */
-  {    16,     10,      3,      0,      0,  18432,    160, }, /* 463 */
-  {    16,      7,      4,      0,      0,  18432,     84, }, /* 464 */
-  {    16,     26,     12,      0,      0,  18432,     74, }, /* 465 */
-  {    16,     15,     12,      0,      0,  18432,     74, }, /* 466 */
-  {    16,     13,     12,      0,      0,  18432,    144, }, /* 467 */
-  {    17,     12,      3,      0,      0,  26624,    106, }, /* 468 */
-  {    17,     10,      5,      0,      0,  18432,    154, }, /* 469 */
-  {    17,      7,     12,      0,      0,  18432,     84, }, /* 470 */
-  {    17,     12,      3,      0,      0,  26624,    158, }, /* 471 */
-  {    17,     10,      3,      0,      0,  18432,    160, }, /* 472 */
-  {    17,     13,     12,      0,      0,  18432,    144, }, /* 473 */
-  {    17,     21,     12,      0,      0,  18432,     74, }, /* 474 */
-  {    18,      7,     12,      0,      0,  18432,     84, }, /* 475 */
-  {    18,     12,      3,      0,      0,  26624,    106, }, /* 476 */
-  {    18,      7,      5,      0,      0,  18432,    166, }, /* 477 */
-  {    18,     12,      3,      0,      0,  26624,    168, }, /* 478 */
-  {    99,     23,     12,      0,      0,  14336,     74, }, /* 479 */
-  {    18,      7,     12,      0,      0,  18432,    170, }, /* 480 */
-  {    18,      6,     12,      0,      0,  18432,    138, }, /* 481 */
-  {    18,     12,      3,      0,      0,  26624,     98, }, /* 482 */
-  {    18,     21,     12,      0,      0,  18432,     74, }, /* 483 */
-  {    18,     13,     12,      0,      0,  18432,    144, }, /* 484 */
-  {    18,     21,     12,      0,      0,  18432,    110, }, /* 485 */
-  {   100,      7,     12,      0,      0,  18432,     84, }, /* 486 */
-  {   100,     12,      3,      0,      0,  26624,    106, }, /* 487 */
-  {   100,      7,      5,      0,      0,  18432,    166, }, /* 488 */
-  {   100,     12,      3,      0,      0,  26624,    158, }, /* 489 */
-  {   100,      7,     12,      0,      0,  18432,    170, }, /* 490 */
-  {   100,      6,     12,      0,      0,  18432,    138, }, /* 491 */
-  {   100,     12,      3,      0,      0,  26624,     98, }, /* 492 */
-  {   100,     12,      3,      0,      0,  26624,    104, }, /* 493 */
-  {   100,     13,     12,      0,      0,  18432,    144, }, /* 494 */
-  {    19,      7,     12,      0,      0,  18432,     84, }, /* 495 */
-  {    19,     26,     12,      0,      0,  18432,     74, }, /* 496 */
-  {    19,     21,     12,      0,      0,  18432,     74, }, /* 497 */
-  {    19,     21,     12,      0,      0,  18432,    110, }, /* 498 */
-  {    19,     12,      3,      0,      0,  26624,     98, }, /* 499 */
-  {    19,     13,     12,      0,      0,  18432,    144, }, /* 500 */
-  {    19,     15,     12,      0,      0,  18432,     74, }, /* 501 */
-  {    19,     22,     12,      0,      0,  28672,    172, }, /* 502 */
-  {    19,     18,     12,      0,      0,  28672,    172, }, /* 503 */
-  {    19,     10,      5,      0,      0,  18432,    174, }, /* 504 */
-  {    19,     12,      3,      0,      0,  26624,    106, }, /* 505 */
-  {    19,     12,      3,      0,      0,  26624,    176, }, /* 506 */
-  {    19,     10,      5,      0,      0,  18432,    154, }, /* 507 */
-  {    19,     12,      3,      0,      0,  26624,    132, }, /* 508 */
-  {    19,     12,      3,      0,      0,  26624,    158, }, /* 509 */
-  {    99,     26,     12,      0,      0,  18432,     74, }, /* 510 */
-  {    20,      7,     12,      0,      0,  18432,     84, }, /* 511 */
-  {    20,     10,     12,      0,      0,  18432,    154, }, /* 512 */
-  {    20,     12,      3,      0,      0,  26624,    106, }, /* 513 */
-  {    20,     10,      5,      0,      0,  18432,    154, }, /* 514 */
-  {    20,     12,      3,      0,      0,  26624,     98, }, /* 515 */
-  {    20,     12,      3,      0,      0,  26624,    158, }, /* 516 */
-  {    20,     13,     12,      0,      0,  18652,    144, }, /* 517 */
-  {    20,     21,     12,      0,      0,  18432,    128, }, /* 518 */
-  {    20,     21,     12,      0,      0,  18432,     74, }, /* 519 */
-  {    20,     10,     12,      0,      0,  18432,    178, }, /* 520 */
-  {    20,     12,      3,      0,      0,  26624,    132, }, /* 521 */
-  {    20,     13,     12,      0,      0,  18432,    144, }, /* 522 */
-  {    20,     26,     12,      0,      0,  18432,     74, }, /* 523 */
-  {    21,      9,     12,      0,   7264,  18432,     76, }, /* 524 */
-  {    21,      5,     12,      0,   3008,  18432,    180, }, /* 525 */
-  {    99,     21,     12,      0,      0,  18656,     74, }, /* 526 */
-  {    21,      6,     12,      0,      0,  18432,    182, }, /* 527 */
-  {    22,      7,      6,      0,      0,  18432,     84, }, /* 528 */
-  {    22,      7,      6,      0,      0,  18432,    184, }, /* 529 */
-  {    22,      7,      7,      0,      0,  18432,    184, }, /* 530 */
-  {    22,      7,      7,      0,      0,  18432,     84, }, /* 531 */
-  {    22,      7,      8,      0,      0,  18432,     84, }, /* 532 */
-  {    23,      7,     12,      0,      0,  18432,     84, }, /* 533 */
-  {    23,     12,      3,      0,      0,  26624,     98, }, /* 534 */
-  {    23,     21,     12,      0,      0,  18432,     74, }, /* 535 */
-  {    23,     21,     12,      0,      0,  18432,    110, }, /* 536 */
-  {    23,     21,     12,      0,      0,  18432,    128, }, /* 537 */
-  {    23,     15,     12,      0,      0,  18432,    144, }, /* 538 */
-  {    23,     15,     12,      0,      0,  18432,     74, }, /* 539 */
-  {    23,     26,     12,      0,      0,  28672,     74, }, /* 540 */
-  {    24,      9,     12,      0,  38864,  18432,    186, }, /* 541 */
-  {    24,      9,     12,      0,      8,  18432,    186, }, /* 542 */
-  {    24,      5,     12,      0,     -8,  18432,     70, }, /* 543 */
-  {   101,     17,     12,      0,      0,  28672,    130, }, /* 544 */
-  {   101,      7,     12,      0,      0,  18432,     84, }, /* 545 */
-  {   101,     26,     12,      0,      0,  18432,     74, }, /* 546 */
-  {   101,     21,     12,      0,      0,  18432,    128, }, /* 547 */
-  {   102,     29,     12,      0,      0,  45056,     52, }, /* 548 */
-  {   102,      7,     12,      0,      0,  18432,     84, }, /* 549 */
-  {   102,     22,     12,      0,      0,  28672,    172, }, /* 550 */
-  {   102,     18,     12,      0,      0,  28672,    172, }, /* 551 */
-  {    25,      7,     12,      0,      0,  18432,     84, }, /* 552 */
-  {    99,     21,     12,      0,      0,  18660,    110, }, /* 553 */
-  {    25,     14,     12,      0,      0,  18432,     84, }, /* 554 */
-  {    33,      7,     12,      0,      0,  18432,     84, }, /* 555 */
-  {    33,     12,      3,      0,      0,  26624,    106, }, /* 556 */
-  {    33,     12,      3,      0,      0,  26624,    158, }, /* 557 */
-  {    33,     10,      3,      0,      0,  18432,    188, }, /* 558 */
-  {    34,      7,     12,      0,      0,  18432,     84, }, /* 559 */
-  {    34,     12,      3,      0,      0,  26624,    106, }, /* 560 */
-  {    34,     10,      3,      0,      0,  18432,    188, }, /* 561 */
-  {    99,     21,     12,      0,      0,  18664,    128, }, /* 562 */
-  {    35,      7,     12,      0,      0,  18432,     84, }, /* 563 */
-  {    35,     12,      3,      0,      0,  26624,    106, }, /* 564 */
-  {    36,      7,     12,      0,      0,  18432,     84, }, /* 565 */
-  {    36,     12,      3,      0,      0,  26624,    106, }, /* 566 */
-  {   103,      7,     12,      0,      0,  18432,     84, }, /* 567 */
-  {   103,      7,     12,      0,      0,  18432,    146, }, /* 568 */
-  {   103,     12,      3,      0,      0,  26624,    102, }, /* 569 */
-  {   103,     10,      5,      0,      0,  18432,    154, }, /* 570 */
-  {   103,     12,      3,      0,      0,  26624,    106, }, /* 571 */
-  {   103,     12,      3,      0,      0,  26624,     98, }, /* 572 */
-  {   103,     12,      3,      0,      0,  26624,    158, }, /* 573 */
-  {   103,     21,     12,      0,      0,  18432,    128, }, /* 574 */
-  {   103,     21,     12,      0,      0,  18432,    110, }, /* 575 */
-  {   103,      6,     12,      0,      0,  18432,    148, }, /* 576 */
-  {   103,     21,     12,      0,      0,  18432,     74, }, /* 577 */
-  {   103,     23,     12,      0,      0,  14336,     74, }, /* 578 */
-  {   103,     13,     12,      0,      0,  18432,    144, }, /* 579 */
-  {   103,     15,     12,      0,      0,  28672,     74, }, /* 580 */
-  {    26,     21,     12,      0,      0,  28672,     74, }, /* 581 */
-  {    99,     21,     12,      0,      0,  28908,    110, }, /* 582 */
-  {    99,     21,     12,      0,      0,  28908,    128, }, /* 583 */
-  {    26,     21,     12,      0,      0,  28672,    110, }, /* 584 */
-  {    26,     17,     12,      0,      0,  28672,    130, }, /* 585 */
-  {    26,     21,     12,      0,      0,  28672,    128, }, /* 586 */
-  {    26,     21,     12,      0,      0,  28672,    190, }, /* 587 */
-  {    26,     12,      3,      0,      0,  26624,    192, }, /* 588 */
-  {    26,      1,      2,      0,      0,   6144,     66, }, /* 589 */
-  {    26,     13,     12,      0,      0,  18432,    144, }, /* 590 */
-  {    26,      7,     12,      0,      0,  18432,     84, }, /* 591 */
-  {    26,      6,     12,      0,      0,  18432,    138, }, /* 592 */
-  {    26,     12,      3,      0,      0,  26624,    194, }, /* 593 */
-  {    26,     12,      3,      0,      0,  26624,    106, }, /* 594 */
-  {    37,      7,     12,      0,      0,  18432,     84, }, /* 595 */
-  {    37,     12,      3,      0,      0,  26624,    106, }, /* 596 */
-  {    37,     10,      5,      0,      0,  18432,    154, }, /* 597 */
-  {    37,     12,      3,      0,      0,  26624,     98, }, /* 598 */
-  {    37,     26,     12,      0,      0,  28672,     74, }, /* 599 */
-  {    37,     21,     12,      0,      0,  28672,    128, }, /* 600 */
-  {    37,     13,     12,      0,      0,  18432,    144, }, /* 601 */
-  {    38,      7,     12,      0,      0,  18432,     84, }, /* 602 */
-  {   110,      7,     12,      0,      0,  18432,     84, }, /* 603 */
-  {   110,      7,     12,      0,      0,  18432,    170, }, /* 604 */
-  {   110,     13,     12,      0,      0,  18432,    144, }, /* 605 */
-  {   110,     15,     12,      0,      0,  18432,    144, }, /* 606 */
-  {   110,     26,     12,      0,      0,  28672,     74, }, /* 607 */
-  {   103,     26,     12,      0,      0,  28672,     74, }, /* 608 */
-  {    42,      7,     12,      0,      0,  18432,     84, }, /* 609 */
-  {    42,     12,      3,      0,      0,  26624,    106, }, /* 610 */
-  {    42,     10,      5,      0,      0,  18432,    154, }, /* 611 */
-  {    42,     21,     12,      0,      0,  18432,     74, }, /* 612 */
-  {   123,      7,     12,      0,      0,  18432,     84, }, /* 613 */
-  {   123,     10,      5,      0,      0,  18432,    154, }, /* 614 */
-  {   123,     12,      3,      0,      0,  26624,    106, }, /* 615 */
-  {   123,     12,      3,      0,      0,  26624,    158, }, /* 616 */
-  {   123,     10,     12,      0,      0,  18432,    154, }, /* 617 */
-  {   123,     12,      3,      0,      0,  26624,     98, }, /* 618 */
-  {   123,     13,     12,      0,      0,  18432,    144, }, /* 619 */
-  {   123,     21,     12,      0,      0,  18432,     74, }, /* 620 */
-  {   123,      6,     12,      0,      0,  18432,    138, }, /* 621 */
-  {   123,     21,     12,      0,      0,  18432,    128, }, /* 622 */
-  {   106,     11,      3,      0,      0,  26624,    196, }, /* 623 */
-  {   106,     12,      3,      0,      0,  26624,    106, }, /* 624 */
-  {   113,     12,      3,      0,      0,  26624,    106, }, /* 625 */
-  {   113,     10,      5,      0,      0,  18432,    154, }, /* 626 */
-  {   113,      7,     12,      0,      0,  18432,     84, }, /* 627 */
-  {   113,     12,      3,      0,      0,  26624,     98, }, /* 628 */
-  {   113,     10,      3,      0,      0,  18432,    160, }, /* 629 */
-  {   113,     10,      3,      0,      0,  18432,    188, }, /* 630 */
-  {   113,     21,     12,      0,      0,  18432,    128, }, /* 631 */
-  {   113,     13,     12,      0,      0,  18432,    144, }, /* 632 */
-  {   113,     21,     12,      0,      0,  18432,     74, }, /* 633 */
-  {   113,     21,     12,      0,      0,  18432,    110, }, /* 634 */
-  {   113,     26,     12,      0,      0,  18432,     74, }, /* 635 */
-  {   116,     12,      3,      0,      0,  26624,    106, }, /* 636 */
-  {   116,     10,      5,      0,      0,  18432,    154, }, /* 637 */
-  {   116,      7,     12,      0,      0,  18432,     84, }, /* 638 */
-  {   116,     10,      3,      0,      0,  18432,    188, }, /* 639 */
-  {   116,     12,      3,      0,      0,  26624,    158, }, /* 640 */
-  {   116,     13,     12,      0,      0,  18432,    144, }, /* 641 */
-  {   132,      7,     12,      0,      0,  18432,     84, }, /* 642 */
-  {   132,     12,      3,      0,      0,  26624,     98, }, /* 643 */
-  {   132,     10,      5,      0,      0,  18432,    154, }, /* 644 */
-  {   132,     12,      3,      0,      0,  26624,    106, }, /* 645 */
-  {   132,     10,      3,      0,      0,  18432,    188, }, /* 646 */
-  {   132,     21,     12,      0,      0,  18432,     74, }, /* 647 */
-  {   117,      7,     12,      0,      0,  18432,     84, }, /* 648 */
-  {   117,     10,      5,      0,      0,  18432,    154, }, /* 649 */
-  {   117,     12,      3,      0,      0,  26624,    106, }, /* 650 */
-  {   117,     12,      3,      0,      0,  26624,    198, }, /* 651 */
-  {   117,     12,      3,      0,      0,  26624,     98, }, /* 652 */
-  {   117,     21,     12,      0,      0,  18432,    128, }, /* 653 */
-  {   117,     21,     12,      0,      0,  18432,    110, }, /* 654 */
-  {   117,     13,     12,      0,      0,  18432,    144, }, /* 655 */
+  {     4,     12,      3,      0,      0,  26624,    132, }, /* 299 */
+  {     4,     17,     12,      0,      0,  34816,    130, }, /* 300 */
+  {     4,     21,     12,      0,      0,  34816,     74, }, /* 301 */
+  {     4,     21,     12,      0,      0,  34816,    110, }, /* 302 */
+  {     4,      7,     12,      0,      0,  34816,     84, }, /* 303 */
+  {     4,     21,     12,      0,      0,  34816,    126, }, /* 304 */
+  {     5,      1,      4,      0,      0,   2048,    134, }, /* 305 */
+  {   100,      1,      4,      0,      0,   2048,    134, }, /* 306 */
+  {     5,     25,     12,      0,      0,  28672,    122, }, /* 307 */
+  {     5,     25,     12,      0,      0,      0,    122, }, /* 308 */
+  {     5,     21,     12,      0,      0,  14336,     74, }, /* 309 */
+  {     5,     23,     12,      0,      0,      0,     74, }, /* 310 */
+  {   100,     21,     12,      0,      0,   8344,    110, }, /* 311 */
+  {     5,     21,     12,      0,      0,      0,     74, }, /* 312 */
+  {     5,     26,     12,      0,      0,  28672,     74, }, /* 313 */
+  {     5,     12,      3,      0,      0,  26624,    106, }, /* 314 */
+  {   100,     21,     12,      0,      0,    152,    110, }, /* 315 */
+  {     5,      1,      2,      0,      0,    156,    136, }, /* 316 */
+  {     5,     21,     12,      0,      0,      0,    128, }, /* 317 */
+  {   100,     21,     12,      0,      0,    160,    128, }, /* 318 */
+  {     5,      7,     12,      0,      0,      0,     84, }, /* 319 */
+  {   100,      6,     12,      0,      0,    164,    138, }, /* 320 */
+  {   107,     12,      3,      0,      0,  26792,    132, }, /* 321 */
+  {   107,     12,      3,      0,      0,  26792,    106, }, /* 322 */
+  {   107,     12,      3,      0,      0,  26792,    140, }, /* 323 */
+  {     5,     12,      3,      0,      0,  26624,    132, }, /* 324 */
+  {     5,     12,      3,      0,      0,  26624,    142, }, /* 325 */
+  {     5,     13,     12,      0,      0,   2220,    144, }, /* 326 */
+  {     5,     21,     12,      0,      0,   2048,     74, }, /* 327 */
+  {     5,      7,     12,      0,      0,      0,    146, }, /* 328 */
+  {     5,     21,     12,      0,      0,    176,    128, }, /* 329 */
+  {     5,     12,      3,      0,      0,  26624,    140, }, /* 330 */
+  {     5,     12,      3,      0,      0,  26624,     98, }, /* 331 */
+  {     5,      6,     12,      0,      0,      0,     94, }, /* 332 */
+  {     5,     13,     12,      0,      0,  10240,    144, }, /* 333 */
+  {     5,     26,     12,      0,      0,      0,     74, }, /* 334 */
+  {     6,     21,     12,      0,      0,      0,    128, }, /* 335 */
+  {     6,     21,     12,      0,      0,      0,    110, }, /* 336 */
+  {     6,     21,     12,      0,      0,      0,     74, }, /* 337 */
+  {    99,      2,     12,      0,      0,      0,      0, }, /* 338 */
+  {     6,      1,      4,      0,      0,      0,    134, }, /* 339 */
+  {     6,      7,     12,      0,      0,      0,     84, }, /* 340 */
+  {     6,     12,      3,      0,      0,  26624,    106, }, /* 341 */
+  {     6,     12,      3,      0,      0,  26624,    132, }, /* 342 */
+  {     6,     12,      3,      0,      0,  26624,     98, }, /* 343 */
+  {     7,      7,     12,      0,      0,      0,     84, }, /* 344 */
+  {     7,     12,      3,      0,      0,  26624,    132, }, /* 345 */
+  {    48,     13,     12,      0,      0,  34816,    144, }, /* 346 */
+  {    48,      7,     12,      0,      0,  34816,     84, }, /* 347 */
+  {    48,     12,      3,      0,      0,  26624,     98, }, /* 348 */
+  {    48,      6,     12,      0,      0,  34816,     94, }, /* 349 */
+  {    48,     26,     12,      0,      0,  28672,     74, }, /* 350 */
+  {    48,     21,     12,      0,      0,  28672,     74, }, /* 351 */
+  {    48,     21,     12,      0,      0,  28672,    110, }, /* 352 */
+  {    48,     21,     12,      0,      0,  28672,    128, }, /* 353 */
+  {    48,      6,     12,      0,      0,  34816,    138, }, /* 354 */
+  {    48,     12,      3,      0,      0,  26624,    104, }, /* 355 */
+  {    48,     23,     12,      0,      0,  34816,     74, }, /* 356 */
+  {    54,      7,     12,      0,      0,  34816,     84, }, /* 357 */
+  {    54,     12,      3,      0,      0,  26624,    106, }, /* 358 */
+  {    54,     12,      3,      0,      0,  26624,     98, }, /* 359 */
+  {    54,      6,     12,      0,      0,  34816,    148, }, /* 360 */
+  {    54,     12,      3,      0,      0,  26624,    104, }, /* 361 */
+  {    54,     21,     12,      0,      0,  34816,    110, }, /* 362 */
+  {    54,     21,     12,      0,      0,  34816,     74, }, /* 363 */
+  {    54,     21,     12,      0,      0,  34816,    128, }, /* 364 */
+  {    59,      7,     12,      0,      0,  34816,     84, }, /* 365 */
+  {    59,     12,      3,      0,      0,  26624,    104, }, /* 366 */
+  {    59,     21,     12,      0,      0,  34816,    110, }, /* 367 */
+  {     5,     24,     12,      0,      0,      0,    126, }, /* 368 */
+  {     5,     12,      3,      0,      0,  26624,    150, }, /* 369 */
+  {     5,     12,      3,      0,      0,  26624,    104, }, /* 370 */
+  {     5,     12,      3,      0,      0,  26624,    152, }, /* 371 */
+  {     8,     12,      3,      0,      0,  26624,    106, }, /* 372 */
+  {     8,     10,      5,      0,      0,  18432,    154, }, /* 373 */
+  {     8,      7,     12,      0,      0,  18432,     84, }, /* 374 */
+  {     8,      7,     12,      0,      0,  18432,    156, }, /* 375 */
+  {     8,     12,      3,      0,      0,  26624,     98, }, /* 376 */
+  {     8,     12,      3,      0,      0,  26624,    158, }, /* 377 */
+  {   107,     12,      3,      0,      0,  26804,     98, }, /* 378 */
+  {   107,     12,      3,      0,      0,  26808,     98, }, /* 379 */
+  {   100,     21,     12,      0,      0,  18620,    128, }, /* 380 */
+  {   100,     21,     12,      0,      0,  18624,    128, }, /* 381 */
+  {     8,     13,     12,      0,      0,  18628,    144, }, /* 382 */
+  {     8,     21,     12,      0,      0,  18432,     74, }, /* 383 */
+  {     8,      6,     12,      0,      0,  18432,     94, }, /* 384 */
+  {     9,      7,     12,      0,      0,  18432,     84, }, /* 385 */
+  {     9,     12,      3,      0,      0,  26624,    106, }, /* 386 */
+  {     9,     10,      5,      0,      0,  18432,    154, }, /* 387 */
+  {     9,      7,     12,      0,      0,  18432,    156, }, /* 388 */
+  {     9,     12,      3,      0,      0,  26624,     98, }, /* 389 */
+  {     9,     10,      3,      0,      0,  18432,    160, }, /* 390 */
+  {     9,     12,      3,      0,      0,  26624,    158, }, /* 391 */
+  {     9,     13,     12,      0,      0,  18632,    144, }, /* 392 */
+  {     9,     23,     12,      0,      0,  14336,     74, }, /* 393 */
+  {     9,     15,     12,      0,      0,  18432,     74, }, /* 394 */
+  {     9,     26,     12,      0,      0,  18432,     74, }, /* 395 */
+  {     9,     21,     12,      0,      0,  18432,     74, }, /* 396 */
+  {     9,     12,      3,      0,      0,  26624,    104, }, /* 397 */
+  {    10,     12,      3,      0,      0,  26624,    106, }, /* 398 */
+  {    10,     10,      5,      0,      0,  18432,    154, }, /* 399 */
+  {    10,      7,     12,      0,      0,  18432,     84, }, /* 400 */
+  {    10,     12,      3,      0,      0,  26624,     98, }, /* 401 */
+  {    10,     12,      3,      0,      0,  26624,    158, }, /* 402 */
+  {    10,     13,     12,      0,      0,  18636,    144, }, /* 403 */
+  {    10,     12,      3,      0,      0,  26624,    162, }, /* 404 */
+  {    10,     21,     12,      0,      0,  18432,     74, }, /* 405 */
+  {    11,     12,      3,      0,      0,  26624,    106, }, /* 406 */
+  {    11,     10,      5,      0,      0,  18432,    154, }, /* 407 */
+  {    11,      7,     12,      0,      0,  18432,     84, }, /* 408 */
+  {    11,      7,     12,      0,      0,  18432,    156, }, /* 409 */
+  {    11,     12,      3,      0,      0,  26624,     98, }, /* 410 */
+  {    11,     12,      3,      0,      0,  26624,    158, }, /* 411 */
+  {    11,     13,     12,      0,      0,  18640,    144, }, /* 412 */
+  {    11,     21,     12,      0,      0,  18432,     74, }, /* 413 */
+  {    11,     23,     12,      0,      0,  14336,     74, }, /* 414 */
+  {    11,     12,      3,      0,      0,  26624,    162, }, /* 415 */
+  {    12,     12,      3,      0,      0,  26624,    106, }, /* 416 */
+  {    12,     10,      5,      0,      0,  18432,    154, }, /* 417 */
+  {    12,      7,     12,      0,      0,  18432,     84, }, /* 418 */
+  {    12,      7,     12,      0,      0,  18432,    156, }, /* 419 */
+  {    12,     12,      3,      0,      0,  26624,     98, }, /* 420 */
+  {    12,     10,      3,      0,      0,  18432,    160, }, /* 421 */
+  {    12,     12,      3,      0,      0,  26624,    158, }, /* 422 */
+  {    12,     12,      3,      0,      0,  26624,    164, }, /* 423 */
+  {    12,     13,     12,      0,      0,  18432,    144, }, /* 424 */
+  {    12,     26,     12,      0,      0,  18432,     74, }, /* 425 */
+  {    12,     15,     12,      0,      0,  18432,     74, }, /* 426 */
+  {    13,     12,      3,      0,      0,  26624,    106, }, /* 427 */
+  {    13,      7,     12,      0,      0,  18432,     84, }, /* 428 */
+  {    13,     10,      3,      0,      0,  18432,    160, }, /* 429 */
+  {    13,     10,      5,      0,      0,  18432,    154, }, /* 430 */
+  {    13,     12,      3,      0,      0,  26624,    158, }, /* 431 */
+  {    13,     13,     12,      0,      0,  18644,    144, }, /* 432 */
+  {    13,     15,     12,      0,      0,  18644,     74, }, /* 433 */
+  {    13,     26,     12,      0,      0,  28884,     74, }, /* 434 */
+  {    13,     26,     12,      0,      0,  28672,     74, }, /* 435 */
+  {    13,     23,     12,      0,      0,  14336,     74, }, /* 436 */
+  {    14,     12,      3,      0,      0,  26624,    106, }, /* 437 */
+  {    14,     10,      5,      0,      0,  18432,    154, }, /* 438 */
+  {    14,      7,     12,      0,      0,  18432,     84, }, /* 439 */
+  {    14,      7,     12,      0,      0,  18432,    156, }, /* 440 */
+  {    14,     12,      3,      0,      0,  26624,     98, }, /* 441 */
+  {    14,     12,      3,      0,      0,  26624,    158, }, /* 442 */
+  {    14,     13,     12,      0,      0,  18432,    144, }, /* 443 */
+  {    14,     21,     12,      0,      0,  18432,     74, }, /* 444 */
+  {    14,     15,     12,      0,      0,  28672,     74, }, /* 445 */
+  {    14,     26,     12,      0,      0,  18432,     74, }, /* 446 */
+  {    15,      7,     12,      0,      0,  18432,     84, }, /* 447 */
+  {    15,     12,      3,      0,      0,  26624,    106, }, /* 448 */
+  {    15,     10,      5,      0,      0,  18432,    154, }, /* 449 */
+  {    15,     21,     12,      0,      0,  18432,     74, }, /* 450 */
+  {    15,     12,      3,      0,      0,  26624,     98, }, /* 451 */
+  {    15,     12,      3,      0,      0,  18432,    106, }, /* 452 */
+  {    15,     10,      3,      0,      0,  18432,    160, }, /* 453 */
+  {    15,     12,      3,      0,      0,  26624,    158, }, /* 454 */
+  {    15,     13,     12,      0,      0,  18648,    144, }, /* 455 */
+  {    16,     12,      3,      0,      0,  26624,    106, }, /* 456 */
+  {    16,     10,      5,      0,      0,  18432,    154, }, /* 457 */
+  {    16,      7,     12,      0,      0,  18432,     84, }, /* 458 */
+  {    16,      7,     12,      0,      0,  18432,    156, }, /* 459 */
+  {    16,     12,      3,      0,      0,  26624,    158, }, /* 460 */
+  {    16,     10,      3,      0,      0,  18432,    160, }, /* 461 */
+  {    16,      7,      4,      0,      0,  18432,     84, }, /* 462 */
+  {    16,     26,     12,      0,      0,  18432,     74, }, /* 463 */
+  {    16,     15,     12,      0,      0,  18432,     74, }, /* 464 */
+  {    16,     13,     12,      0,      0,  18432,    144, }, /* 465 */
+  {    17,     12,      3,      0,      0,  26624,    106, }, /* 466 */
+  {    17,     10,      5,      0,      0,  18432,    154, }, /* 467 */
+  {    17,      7,     12,      0,      0,  18432,     84, }, /* 468 */
+  {    17,     12,      3,      0,      0,  26624,    158, }, /* 469 */
+  {    17,     10,      3,      0,      0,  18432,    160, }, /* 470 */
+  {    17,     13,     12,      0,      0,  18432,    144, }, /* 471 */
+  {    17,     21,     12,      0,      0,  18432,     74, }, /* 472 */
+  {    18,      7,     12,      0,      0,  18432,     84, }, /* 473 */
+  {    18,     12,      3,      0,      0,  26624,    106, }, /* 474 */
+  {    18,      7,      5,      0,      0,  18432,    166, }, /* 475 */
+  {    18,     12,      3,      0,      0,  26624,    168, }, /* 476 */
+  {   100,     23,     12,      0,      0,  14336,     74, }, /* 477 */
+  {    18,      7,     12,      0,      0,  18432,    170, }, /* 478 */
+  {    18,      6,     12,      0,      0,  18432,    138, }, /* 479 */
+  {    18,     12,      3,      0,      0,  26624,     98, }, /* 480 */
+  {    18,     21,     12,      0,      0,  18432,     74, }, /* 481 */
+  {    18,     13,     12,      0,      0,  18432,    144, }, /* 482 */
+  {    18,     21,     12,      0,      0,  18432,    110, }, /* 483 */
+  {   101,      7,     12,      0,      0,  18432,     84, }, /* 484 */
+  {   101,     12,      3,      0,      0,  26624,    106, }, /* 485 */
+  {   101,      7,      5,      0,      0,  18432,    166, }, /* 486 */
+  {   101,     12,      3,      0,      0,  26624,    158, }, /* 487 */
+  {   101,      7,     12,      0,      0,  18432,    170, }, /* 488 */
+  {   101,      6,     12,      0,      0,  18432,    138, }, /* 489 */
+  {   101,     12,      3,      0,      0,  26624,     98, }, /* 490 */
+  {   101,     12,      3,      0,      0,  26624,    104, }, /* 491 */
+  {   101,     13,     12,      0,      0,  18432,    144, }, /* 492 */
+  {    19,      7,     12,      0,      0,  18432,     84, }, /* 493 */
+  {    19,     26,     12,      0,      0,  18432,     74, }, /* 494 */
+  {    19,     21,     12,      0,      0,  18432,     74, }, /* 495 */
+  {    19,     21,     12,      0,      0,  18432,    110, }, /* 496 */
+  {    19,     12,      3,      0,      0,  26624,     98, }, /* 497 */
+  {    19,     13,     12,      0,      0,  18432,    144, }, /* 498 */
+  {    19,     15,     12,      0,      0,  18432,     74, }, /* 499 */
+  {    19,     22,     12,      0,      0,  28672,    172, }, /* 500 */
+  {    19,     18,     12,      0,      0,  28672,    172, }, /* 501 */
+  {    19,     10,      5,      0,      0,  18432,    174, }, /* 502 */
+  {    19,     12,      3,      0,      0,  26624,    106, }, /* 503 */
+  {    19,     12,      3,      0,      0,  26624,    176, }, /* 504 */
+  {    19,     10,      5,      0,      0,  18432,    154, }, /* 505 */
+  {    19,     12,      3,      0,      0,  26624,    132, }, /* 506 */
+  {    19,     12,      3,      0,      0,  26624,    158, }, /* 507 */
+  {   100,     26,     12,      0,      0,  18432,     74, }, /* 508 */
+  {    20,      7,     12,      0,      0,  18432,    156, }, /* 509 */
+  {    20,     10,     12,      0,      0,  18432,    154, }, /* 510 */
+  {    20,     12,      3,      0,      0,  26624,    106, }, /* 511 */
+  {    20,     10,      5,      0,      0,  18432,    154, }, /* 512 */
+  {    20,     12,      3,      0,      0,  26624,     98, }, /* 513 */
+  {    20,     12,      3,      0,      0,  26624,    158, }, /* 514 */
+  {    20,     13,     12,      0,      0,  18652,    144, }, /* 515 */
+  {    20,     21,     12,      0,      0,  18432,    128, }, /* 516 */
+  {    20,     21,     12,      0,      0,  18432,     74, }, /* 517 */
+  {    20,     10,     12,      0,      0,  18432,    178, }, /* 518 */
+  {    20,     12,      3,      0,      0,  26624,    132, }, /* 519 */
+  {    20,     13,     12,      0,      0,  18432,    144, }, /* 520 */
+  {    20,     26,     12,      0,      0,  18432,     74, }, /* 521 */
+  {    21,      9,     12,      0,   7264,  18432,     76, }, /* 522 */
+  {    21,      5,     12,      0,   3008,  18432,    180, }, /* 523 */
+  {   100,     21,     12,      0,      0,  18656,     74, }, /* 524 */
+  {    21,      6,     12,      0,      0,  18432,    182, }, /* 525 */
+  {    22,      7,      6,      0,      0,  18432,     84, }, /* 526 */
+  {    22,      7,      6,      0,      0,  18432,    184, }, /* 527 */
+  {    22,      7,      7,      0,      0,  18432,    184, }, /* 528 */
+  {    22,      7,      7,      0,      0,  18432,     84, }, /* 529 */
+  {    22,      7,      8,      0,      0,  18432,     84, }, /* 530 */
+  {    23,      7,     12,      0,      0,  18432,     84, }, /* 531 */
+  {    23,     12,      3,      0,      0,  26624,     98, }, /* 532 */
+  {    23,     21,     12,      0,      0,  18432,     74, }, /* 533 */
+  {    23,     21,     12,      0,      0,  18432,    110, }, /* 534 */
+  {    23,     21,     12,      0,      0,  18432,    128, }, /* 535 */
+  {    23,     15,     12,      0,      0,  18432,    144, }, /* 536 */
+  {    23,     15,     12,      0,      0,  18432,     74, }, /* 537 */
+  {    23,     26,     12,      0,      0,  28672,     74, }, /* 538 */
+  {    24,      9,     12,      0,  38864,  18432,    186, }, /* 539 */
+  {    24,      9,     12,      0,      8,  18432,    186, }, /* 540 */
+  {    24,      5,     12,      0,     -8,  18432,     70, }, /* 541 */
+  {   102,     17,     12,      0,      0,  28672,    130, }, /* 542 */
+  {   102,      7,     12,      0,      0,  18432,     84, }, /* 543 */
+  {   102,     26,     12,      0,      0,  18432,     74, }, /* 544 */
+  {   102,     21,     12,      0,      0,  18432,    128, }, /* 545 */
+  {   103,     29,     12,      0,      0,  45056,     52, }, /* 546 */
+  {   103,      7,     12,      0,      0,  18432,     84, }, /* 547 */
+  {   103,     22,     12,      0,      0,  28672,    172, }, /* 548 */
+  {   103,     18,     12,      0,      0,  28672,    172, }, /* 549 */
+  {    25,      7,     12,      0,      0,  18432,     84, }, /* 550 */
+  {   100,     21,     12,      0,      0,  18660,    110, }, /* 551 */
+  {    25,     14,     12,      0,      0,  18432,     84, }, /* 552 */
+  {    33,      7,     12,      0,      0,  18432,     84, }, /* 553 */
+  {    33,     12,      3,      0,      0,  26624,    106, }, /* 554 */
+  {    33,     12,      3,      0,      0,  26624,    158, }, /* 555 */
+  {    33,     10,      3,      0,      0,  18432,    188, }, /* 556 */
+  {    34,      7,     12,      0,      0,  18432,     84, }, /* 557 */
+  {    34,     12,      3,      0,      0,  26624,    106, }, /* 558 */
+  {    34,     10,      3,      0,      0,  18432,    188, }, /* 559 */
+  {   100,     21,     12,      0,      0,  18664,    128, }, /* 560 */
+  {    35,      7,     12,      0,      0,  18432,     84, }, /* 561 */
+  {    35,     12,      3,      0,      0,  26624,    106, }, /* 562 */
+  {    36,      7,     12,      0,      0,  18432,     84, }, /* 563 */
+  {    36,     12,      3,      0,      0,  26624,    106, }, /* 564 */
+  {   104,      7,     12,      0,      0,  18432,    156, }, /* 565 */
+  {   104,      7,     12,      0,      0,  18432,    190, }, /* 566 */
+  {   104,     12,      3,      0,      0,  26624,    102, }, /* 567 */
+  {   104,     10,      5,      0,      0,  18432,    154, }, /* 568 */
+  {   104,     12,      3,      0,      0,  26624,    106, }, /* 569 */
+  {   104,     12,      3,      0,      0,  26624,     98, }, /* 570 */
+  {   104,     12,      3,      0,      0,  26624,    158, }, /* 571 */
+  {   104,     21,     12,      0,      0,  18432,    128, }, /* 572 */
+  {   104,     21,     12,      0,      0,  18432,    110, }, /* 573 */
+  {   104,      6,     12,      0,      0,  18432,    148, }, /* 574 */
+  {   104,     21,     12,      0,      0,  18432,     74, }, /* 575 */
+  {   104,     23,     12,      0,      0,  14336,     74, }, /* 576 */
+  {   104,      7,     12,      0,      0,  18432,     84, }, /* 577 */
+  {   104,     13,     12,      0,      0,  18432,    144, }, /* 578 */
+  {   104,     15,     12,      0,      0,  28672,     74, }, /* 579 */
+  {    26,     21,     12,      0,      0,  28672,     74, }, /* 580 */
+  {   100,     21,     12,      0,      0,  28908,    110, }, /* 581 */
+  {   100,     21,     12,      0,      0,  28908,    128, }, /* 582 */
+  {    26,     21,     12,      0,      0,  28672,    110, }, /* 583 */
+  {    26,     17,     12,      0,      0,  28672,    130, }, /* 584 */
+  {    26,     21,     12,      0,      0,  28672,    128, }, /* 585 */
+  {    26,     21,     12,      0,      0,  28672,    192, }, /* 586 */
+  {    26,     12,      3,      0,      0,  26624,    194, }, /* 587 */
+  {    26,      1,      2,      0,      0,   6144,     66, }, /* 588 */
+  {    26,     13,     12,      0,      0,  18432,    144, }, /* 589 */
+  {    26,      7,     12,      0,      0,  18432,     84, }, /* 590 */
+  {    26,      6,     12,      0,      0,  18432,    138, }, /* 591 */
+  {    26,     12,      3,      0,      0,  26624,    196, }, /* 592 */
+  {    26,     12,      3,      0,      0,  26624,    106, }, /* 593 */
+  {    37,      7,     12,      0,      0,  18432,     84, }, /* 594 */
+  {    37,     12,      3,      0,      0,  26624,    106, }, /* 595 */
+  {    37,     10,      5,      0,      0,  18432,    154, }, /* 596 */
+  {    37,     12,      3,      0,      0,  26624,     98, }, /* 597 */
+  {    37,     26,     12,      0,      0,  28672,     74, }, /* 598 */
+  {    37,     21,     12,      0,      0,  28672,    128, }, /* 599 */
+  {    37,     13,     12,      0,      0,  18432,    144, }, /* 600 */
+  {    38,      7,     12,      0,      0,  18432,     84, }, /* 601 */
+  {   111,      7,     12,      0,      0,  18432,     84, }, /* 602 */
+  {   111,      7,     12,      0,      0,  18432,    170, }, /* 603 */
+  {   111,     13,     12,      0,      0,  18432,    144, }, /* 604 */
+  {   111,     15,     12,      0,      0,  18432,    144, }, /* 605 */
+  {   111,     26,     12,      0,      0,  28672,     74, }, /* 606 */
+  {   104,     26,     12,      0,      0,  28672,     74, }, /* 607 */
+  {    42,      7,     12,      0,      0,  18432,     84, }, /* 608 */
+  {    42,     12,      3,      0,      0,  26624,    106, }, /* 609 */
+  {    42,     10,      5,      0,      0,  18432,    154, }, /* 610 */
+  {    42,     21,     12,      0,      0,  18432,     74, }, /* 611 */
+  {   124,      7,     12,      0,      0,  18432,    156, }, /* 612 */
+  {   124,     10,      5,      0,      0,  18432,    154, }, /* 613 */
+  {   124,     12,      3,      0,      0,  26624,    106, }, /* 614 */
+  {   124,     12,      3,      0,      0,  26624,    158, }, /* 615 */
+  {   124,     10,     12,      0,      0,  18432,    154, }, /* 616 */
+  {   124,     12,      3,      0,      0,  26624,     98, }, /* 617 */
+  {   124,     13,     12,      0,      0,  18432,    144, }, /* 618 */
+  {   124,     21,     12,      0,      0,  18432,     74, }, /* 619 */
+  {   124,      6,     12,      0,      0,  18432,    138, }, /* 620 */
+  {   124,     21,     12,      0,      0,  18432,    128, }, /* 621 */
+  {   107,     11,      3,      0,      0,  26624,    198, }, /* 622 */
+  {   107,     12,      3,      0,      0,  26624,    106, }, /* 623 */
+  {   114,     12,      3,      0,      0,  26624,    106, }, /* 624 */
+  {   114,     10,      5,      0,      0,  18432,    154, }, /* 625 */
+  {   114,      7,     12,      0,      0,  18432,     84, }, /* 626 */
+  {   114,      7,     12,      0,      0,  18432,    156, }, /* 627 */
+  {   114,     12,      3,      0,      0,  26624,     98, }, /* 628 */
+  {   114,     10,      3,      0,      0,  18432,    160, }, /* 629 */
+  {   114,     10,      3,      0,      0,  18432,    188, }, /* 630 */
+  {   114,     21,     12,      0,      0,  18432,    128, }, /* 631 */
+  {   114,     13,     12,      0,      0,  18432,    144, }, /* 632 */
+  {   114,     21,     12,      0,      0,  18432,     74, }, /* 633 */
+  {   114,     21,     12,      0,      0,  18432,    110, }, /* 634 */
+  {   114,     26,     12,      0,      0,  18432,     74, }, /* 635 */
+  {   117,     12,      3,      0,      0,  26624,    106, }, /* 636 */
+  {   117,     10,      5,      0,      0,  18432,    154, }, /* 637 */
+  {   117,      7,     12,      0,      0,  18432,    156, }, /* 638 */
+  {   117,     10,      3,      0,      0,  18432,    188, }, /* 639 */
+  {   117,     12,      3,      0,      0,  26624,    158, }, /* 640 */
+  {   117,     13,     12,      0,      0,  18432,    144, }, /* 641 */
+  {   117,      7,     12,      0,      0,  18432,     84, }, /* 642 */
+  {   133,      7,     12,      0,      0,  18432,     84, }, /* 643 */
+  {   133,     12,      3,      0,      0,  26624,     98, }, /* 644 */
+  {   133,     10,      5,      0,      0,  18432,    154, }, /* 645 */
+  {   133,     12,      3,      0,      0,  26624,    106, }, /* 646 */
+  {   133,     10,      3,      0,      0,  18432,    188, }, /* 647 */
+  {   133,     21,     12,      0,      0,  18432,     74, }, /* 648 */
+  {   118,      7,     12,      0,      0,  18432,     84, }, /* 649 */
+  {   118,     10,      5,      0,      0,  18432,    154, }, /* 650 */
+  {   118,     12,      3,      0,      0,  26624,    106, }, /* 651 */
+  {   118,     12,      3,      0,      0,  26624,    200, }, /* 652 */
+  {   118,     12,      3,      0,      0,  26624,     98, }, /* 653 */
+  {   118,     21,     12,      0,      0,  18432,    128, }, /* 654 */
+  {   118,     21,     12,      0,      0,  18432,    110, }, /* 655 */
   {   118,     13,     12,      0,      0,  18432,    144, }, /* 656 */
-  {   118,      7,     12,      0,      0,  18432,     84, }, /* 657 */
-  {   118,      6,     12,      0,      0,  18432,     94, }, /* 658 */
-  {   118,      6,     12,      0,      0,  18432,     96, }, /* 659 */
-  {   118,     21,     12,      0,      0,  18432,    128, }, /* 660 */
-  {     2,      5,     12,     63,  -6222,  18432,     70, }, /* 661 */
-  {     2,      5,     12,     67,  -6221,  18432,     70, }, /* 662 */
-  {     2,      5,     12,     71,  -6212,  18432,     70, }, /* 663 */
-  {     2,      5,     12,     75,  -6210,  18432,     70, }, /* 664 */
-  {     2,      5,     12,     79,  -6210,  18432,     70, }, /* 665 */
-  {     2,      5,     12,     79,  -6211,  18432,     70, }, /* 666 */
-  {     2,      5,     12,     84,  -6204,  18432,     70, }, /* 667 */
-  {     2,      5,     12,     88,  -6180,  18432,     70, }, /* 668 */
-  {     2,      5,     12,    108,  35267,  18432,     70, }, /* 669 */
-  {    21,      9,     12,      0,  -3008,  18432,     76, }, /* 670 */
-  {   116,     21,     12,      0,      0,  18432,     74, }, /* 671 */
-  {   106,     12,      3,      0,      0,  26864,     98, }, /* 672 */
-  {   106,     12,      3,      0,      0,  26868,     98, }, /* 673 */
-  {    99,     21,     12,      0,      0,  18680,    200, }, /* 674 */
-  {   106,     12,      3,      0,      0,  26876,     98, }, /* 675 */
-  {   106,     12,      3,      0,      0,  26880,     98, }, /* 676 */
-  {   106,     12,      3,      0,      0,  26884,     98, }, /* 677 */
-  {    99,     10,      5,      0,      0,  18684,    174, }, /* 678 */
-  {    99,      7,     12,      0,      0,  18696,     84, }, /* 679 */
-  {    99,      7,     12,      0,      0,  18684,     84, }, /* 680 */
-  {    99,      7,     12,      0,      0,  18676,     84, }, /* 681 */
-  {    99,      7,     12,      0,      0,  18700,     84, }, /* 682 */
-  {    99,      7,     12,      0,      0,  18704,     84, }, /* 683 */
-  {   106,     12,      3,      0,      0,  26900,     98, }, /* 684 */
-  {    99,     10,      5,      0,      0,  18712,    174, }, /* 685 */
-  {   106,     12,      3,      0,      0,  26896,     98, }, /* 686 */
-  {    99,      7,     12,      0,      0,  18716,     84, }, /* 687 */
-  {     2,      5,     12,      0,      0,  18432,     60, }, /* 688 */
-  {     1,      6,     12,      0,      0,  18432,     90, }, /* 689 */
-  {     2,      6,     12,      0,      0,  18432,    182, }, /* 690 */
-  {     0,      5,     12,      0,  35332,  18432,     78, }, /* 691 */
-  {     0,      5,     12,      0,   3814,  18432,     78, }, /* 692 */
-  {     0,      5,     12,      0,  35384,  18432,     78, }, /* 693 */
-  {     0,      5,     12,      0,      0,  18432,    202, }, /* 694 */
-  {     0,      6,     12,      0,      0,  18432,    182, }, /* 695 */
-  {     0,      6,     12,      0,      0,  18432,    204, }, /* 696 */
-  {     1,      6,     12,      0,      0,  18432,    182, }, /* 697 */
-  {   106,     12,      3,      0,      0,  26740,    104, }, /* 698 */
-  {   106,     12,      3,      0,      0,  26912,     98, }, /* 699 */
-  {   106,     12,      3,      0,      0,  26916,     98, }, /* 700 */
-  {     0,      9,     12,     92,      1,  18432,     76, }, /* 701 */
-  {     0,      5,     12,     92,     -1,  18432,     78, }, /* 702 */
-  {     0,      5,     12,      0,      0,  18432,     70, }, /* 703 */
-  {     0,      5,     12,     92,    -58,  18432,     70, }, /* 704 */
-  {     0,      9,     12,      0,  -7615,  18432,     76, }, /* 705 */
-  {     1,      5,     12,      0,      8,  18432,     78, }, /* 706 */
-  {     1,      9,     12,      0,     -8,  18432,     76, }, /* 707 */
-  {     1,      5,     12,      0,      0,  18432,     78, }, /* 708 */
-  {     1,      5,     12,      0,     74,  18432,     78, }, /* 709 */
-  {     1,      5,     12,      0,     86,  18432,     78, }, /* 710 */
-  {     1,      5,     12,      0,    100,  18432,     78, }, /* 711 */
-  {     1,      5,     12,      0,    128,  18432,     78, }, /* 712 */
-  {     1,      5,     12,      0,    112,  18432,     78, }, /* 713 */
-  {     1,      5,     12,      0,    126,  18432,     78, }, /* 714 */
-  {     1,      5,     12,      0,      8,  18432,     70, }, /* 715 */
-  {     1,      8,     12,      0,     -8,  18432,     88, }, /* 716 */
-  {     1,      5,     12,      0,      0,  18432,     70, }, /* 717 */
-  {     1,      5,     12,      0,      9,  18432,     70, }, /* 718 */
-  {     1,      9,     12,      0,    -74,  18432,     76, }, /* 719 */
-  {     1,      8,     12,      0,     -9,  18432,     88, }, /* 720 */
-  {     1,      5,     12,     21,  -7173,  18432,     78, }, /* 721 */
-  {     1,      9,     12,      0,    -86,  18432,     76, }, /* 722 */
-  {     1,      5,     12,      0,  -7235,  18432,     78, }, /* 723 */
-  {     1,      9,     12,      0,   -100,  18432,     76, }, /* 724 */
-  {     1,      5,     12,      0,  -7219,  18432,     78, }, /* 725 */
-  {     1,      9,     12,      0,   -112,  18432,     76, }, /* 726 */
-  {     1,      9,     12,      0,   -128,  18432,     76, }, /* 727 */
-  {     1,      9,     12,      0,   -126,  18432,     76, }, /* 728 */
-  {    99,     29,     12,      0,      0,  45056,     52, }, /* 729 */
-  {   106,      1,      3,      0,      0,   6144,    206, }, /* 730 */
-  {   106,      1,     13,      0,      0,   6144,    208, }, /* 731 */
-  {    99,      1,      2,      0,      0,  18432,    210, }, /* 732 */
-  {    99,      1,      2,      0,      0,  34816,    210, }, /* 733 */
-  {    99,     17,     12,      0,      0,  28672,    212, }, /* 734 */
-  {    99,     21,     12,      0,      0,  28672,     64, }, /* 735 */
-  {    99,     20,     12,      0,      0,  28672,    214, }, /* 736 */
-  {    99,     19,     12,      0,      0,  28672,    214, }, /* 737 */
-  {    99,     22,     12,      0,      0,  28672,    216, }, /* 738 */
-  {    99,     20,     12,      0,      0,  28672,    216, }, /* 739 */
-  {    99,     19,     12,      0,      0,  28672,    216, }, /* 740 */
-  {    99,     21,     12,      0,      0,  28672,    218, }, /* 741 */
-  {    99,     21,     12,      0,      0,  28672,    220, }, /* 742 */
-  {    99,     27,      2,      0,      0,  45056,     50, }, /* 743 */
-  {    99,     28,      2,      0,      0,   4096,     50, }, /* 744 */
-  {    99,      1,      2,      0,      0,  20480,    136, }, /* 745 */
-  {    99,      1,      2,      0,      0,  36864,    136, }, /* 746 */
-  {    99,      1,      2,      0,      0,  30720,    136, }, /* 747 */
-  {    99,      1,      2,      0,      0,  24576,    136, }, /* 748 */
-  {    99,      1,      2,      0,      0,  40960,    136, }, /* 749 */
-  {    99,     29,     12,      0,      0,   8488,     52, }, /* 750 */
-  {    99,     21,     12,      0,      0,  14336,     54, }, /* 751 */
-  {    99,     21,     12,      0,      0,  14336,     64, }, /* 752 */
-  {    99,     21,     14,      0,      0,  28672,    222, }, /* 753 */
-  {    99,     21,     12,      0,      0,  28672,    224, }, /* 754 */
-  {    99,     16,     12,      0,      0,  28672,    144, }, /* 755 */
-  {    99,     16,     12,      0,      0,  28672,    226, }, /* 756 */
-  {    99,     25,     12,      0,      0,   8192,     64, }, /* 757 */
-  {    99,     22,     12,      0,      0,  28672,    228, }, /* 758 */
-  {    99,     18,     12,      0,      0,  28672,    228, }, /* 759 */
-  {    99,     21,     12,      0,      0,  28972,     54, }, /* 760 */
-  {    99,     21,     12,      0,      0,  28672,    212, }, /* 761 */
-  {    99,     21,     12,      0,      0,  28976,     54, }, /* 762 */
-  {    99,     21,     12,      0,      0,  28980,     54, }, /* 763 */
-  {    99,      1,      2,      0,      0,   6144,    230, }, /* 764 */
-  {    98,      2,      2,      0,      0,   6144,    232, }, /* 765 */
-  {    99,      1,      2,      0,      0,  22528,    136, }, /* 766 */
-  {    99,      1,      2,      0,      0,  38912,    136, }, /* 767 */
-  {    99,      1,      2,      0,      0,  16384,    136, }, /* 768 */
-  {    99,      1,      2,      0,      0,  32768,    136, }, /* 769 */
-  {    99,      1,      2,      0,      0,   6144,    234, }, /* 770 */
-  {    99,     25,     12,      0,      0,  12288,    236, }, /* 771 */
-  {    99,     25,     12,      0,      0,  12288,    238, }, /* 772 */
-  {    99,     25,     12,      0,      0,  28672,    236, }, /* 773 */
-  {    99,     22,     12,      0,      0,  28672,    240, }, /* 774 */
-  {    99,     18,     12,      0,      0,  28672,    240, }, /* 775 */
-  {    98,      2,     12,      0,      0,  14336,      0, }, /* 776 */
-  {   106,     12,      3,      0,      0,  26624,    242, }, /* 777 */
-  {   106,     11,      3,      0,      0,  26624,    124, }, /* 778 */
-  {   106,     11,      3,      0,      0,  26624,    244, }, /* 779 */
-  {   106,     12,      3,      0,      0,  26936,    104, }, /* 780 */
-  {    99,     26,     12,      0,      0,  28672,     74, }, /* 781 */
-  {    99,      9,     12,      0,      0,  18432,    116, }, /* 782 */
-  {    99,      5,     12,      0,      0,  18432,    246, }, /* 783 */
-  {    99,     25,     12,      0,      0,  28672,    248, }, /* 784 */
-  {    99,     26,     14,      0,      0,  28672,    250, }, /* 785 */
-  {     1,      9,     12,     96,  -7517,  18432,     76, }, /* 786 */
-  {    99,     26,     12,      0,      0,  28672,    122, }, /* 787 */
-  {     0,      9,     12,    100,      0,  18432,     76, }, /* 788 */
-  {     0,      9,     12,    104,  -8262,  18432,     76, }, /* 789 */
-  {    99,     26,     12,      0,      0,  14336,    252, }, /* 790 */
-  {     0,      9,     12,      0,     28,  18432,     76, }, /* 791 */
-  {    99,      7,     12,      0,      0,  18432,    254, }, /* 792 */
-  {    99,      5,     14,      0,      0,  18432,    256, }, /* 793 */
-  {    99,     25,     12,      0,      0,  28672,    122, }, /* 794 */
-  {    99,      5,     12,      0,      0,  18432,    258, }, /* 795 */
-  {     0,      5,     12,      0,    -28,  18432,     78, }, /* 796 */
-  {     0,     14,     12,      0,     16,  18432,     76, }, /* 797 */
-  {     0,     14,     12,      0,    -16,  18432,     78, }, /* 798 */
-  {     0,     14,     12,      0,      0,  18432,     84, }, /* 799 */
-  {    99,     25,     14,      0,      0,  28672,    260, }, /* 800 */
-  {    99,     26,     14,      0,      0,  28672,    260, }, /* 801 */
-  {    99,     26,     12,      0,      0,  28672,     64, }, /* 802 */
-  {    99,     25,     12,      0,      0,  28672,    262, }, /* 803 */
-  {    99,     25,     12,      0,      0,  28672,    264, }, /* 804 */
-  {    99,     25,     12,      0,      0,  12288,    266, }, /* 805 */
-  {    99,     22,     12,      0,      0,  28672,    264, }, /* 806 */
-  {    99,     18,     12,      0,      0,  28672,    264, }, /* 807 */
-  {    99,     26,     14,      0,      0,  28672,    268, }, /* 808 */
-  {    99,     22,     12,      0,      0,  28672,    270, }, /* 809 */
-  {    99,     18,     12,      0,      0,  28672,    270, }, /* 810 */
-  {    99,     26,     12,      0,      0,  18432,     54, }, /* 811 */
-  {    99,     26,     14,      0,      0,  28672,    272, }, /* 812 */
-  {    98,      2,     12,      0,      0,  18432,    274, }, /* 813 */
-  {    99,     15,     12,      0,      0,  10240,     74, }, /* 814 */
-  {    99,     26,     12,      0,     26,  18432,    276, }, /* 815 */
-  {    99,     26,     14,      0,     26,  18432,    278, }, /* 816 */
-  {    99,     26,     12,      0,    -26,  18432,    280, }, /* 817 */
-  {    99,     25,     14,      0,      0,  28672,    282, }, /* 818 */
-  {    99,     26,     14,      0,      0,  28672,    284, }, /* 819 */
-  {    99,     26,     14,      0,      0,  28672,    286, }, /* 820 */
-  {    99,     25,     14,      0,      0,  28672,    284, }, /* 821 */
-  {    99,     26,     14,      0,      0,  18432,    272, }, /* 822 */
-  {    99,     26,     14,      0,      0,  28672,    288, }, /* 823 */
-  {   109,     26,     12,      0,      0,  18432,     54, }, /* 824 */
-  {    99,     26,     12,      0,      0,  28672,    228, }, /* 825 */
-  {    44,      9,     12,      0,     48,  18432,     76, }, /* 826 */
-  {    44,      5,     12,      0,    -48,  18432,     78, }, /* 827 */
-  {     0,      9,     12,      0, -10743,  18432,     76, }, /* 828 */
-  {     0,      9,     12,      0,  -3814,  18432,     76, }, /* 829 */
-  {     0,      9,     12,      0, -10727,  18432,     76, }, /* 830 */
-  {     0,      5,     12,      0, -10795,  18432,     78, }, /* 831 */
-  {     0,      5,     12,      0, -10792,  18432,     78, }, /* 832 */
-  {     0,      9,     12,      0, -10780,  18432,     76, }, /* 833 */
-  {     0,      9,     12,      0, -10749,  18432,     76, }, /* 834 */
-  {     0,      9,     12,      0, -10783,  18432,     76, }, /* 835 */
-  {     0,      9,     12,      0, -10782,  18432,     76, }, /* 836 */
-  {     0,      9,     12,      0, -10815,  18432,     76, }, /* 837 */
-  {    43,      5,     12,      0,      0,  18432,     60, }, /* 838 */
-  {    43,     26,     12,      0,      0,  28672,     74, }, /* 839 */
-  {    43,     12,      3,      0,      0,  26624,     98, }, /* 840 */
-  {    43,     21,     12,      0,      0,  28672,    128, }, /* 841 */
-  {    43,     21,     12,      0,      0,  28672,     74, }, /* 842 */
-  {    43,     15,     12,      0,      0,  28672,     74, }, /* 843 */
-  {    21,      5,     12,      0,  -7264,  18432,     78, }, /* 844 */
-  {    45,      7,     12,      0,      0,  18432,     84, }, /* 845 */
-  {    45,      6,     12,      0,      0,  18432,    148, }, /* 846 */
-  {    45,     21,     12,      0,      0,  18432,     74, }, /* 847 */
-  {    45,     12,      3,      0,      0,  26624,    290, }, /* 848 */
-  {     2,     12,      3,      0,      0,  26624,    106, }, /* 849 */
-  {    99,     20,     12,      0,      0,  28672,    228, }, /* 850 */
-  {    99,     19,     12,      0,      0,  28672,    228, }, /* 851 */
-  {    99,     17,     12,      0,      0,  28988,    212, }, /* 852 */
-  {    99,      6,     12,      0,      0,  28672,    292, }, /* 853 */
-  {    99,     21,     12,      0,      0,  28992,     54, }, /* 854 */
-  {    99,     21,     12,      0,      0,  28996,     54, }, /* 855 */
-  {    99,     21,     12,      0,      0,  29000,    224, }, /* 856 */
-  {    99,     21,     12,      0,      0,  29004,    294, }, /* 857 */
-  {    99,     21,     12,      0,      0,  28812,     54, }, /* 858 */
-  {    99,     21,     12,      0,      0,  28672,    294, }, /* 859 */
-  {    30,     26,     12,      0,      0,  28672,    296, }, /* 860 */
-  {    99,     26,     12,      0,      0,  29008,    298, }, /* 861 */
-  {    99,     26,     12,      0,      0,  29008,    300, }, /* 862 */
-  {    99,     26,     12,      0,      0,  29008,    302, }, /* 863 */
-  {    99,     21,     12,      0,      0,  29012,    294, }, /* 864 */
-  {    99,     21,     12,      0,      0,  29016,    224, }, /* 865 */
-  {    99,     21,     12,      0,      0,  29020,     54, }, /* 866 */
-  {    30,      6,     12,      0,      0,  18432,    138, }, /* 867 */
-  {    99,      7,     12,      0,      0,  18784,    304, }, /* 868 */
-  {    30,     14,     12,      0,      0,  18432,    304, }, /* 869 */
-  {    99,     22,     12,      0,      0,  29028,    228, }, /* 870 */
-  {    99,     18,     12,      0,      0,  29028,    228, }, /* 871 */
-  {    99,     22,     12,      0,      0,  29032,    228, }, /* 872 */
-  {    99,     18,     12,      0,      0,  29032,    228, }, /* 873 */
-  {    99,     22,     12,      0,      0,  29036,     62, }, /* 874 */
-  {    99,     18,     12,      0,      0,  29036,     62, }, /* 875 */
-  {    99,     22,     12,      0,      0,  29036,    228, }, /* 876 */
-  {    99,     18,     12,      0,      0,  29036,    228, }, /* 877 */
-  {    99,     26,     12,      0,      0,  29020,     54, }, /* 878 */
-  {    99,     17,     12,      0,      0,  29020,    212, }, /* 879 */
-  {    99,     22,     12,      0,      0,  29020,    216, }, /* 880 */
-  {    99,     18,     12,      0,      0,  29020,    216, }, /* 881 */
-  {   106,     12,      3,      0,      0,  26992,     98, }, /* 882 */
-  {    22,     10,      3,      0,      0,  18432,    306, }, /* 883 */
-  {    99,     17,     14,      0,      0,  29020,    308, }, /* 884 */
-  {    99,      6,     12,      0,      0,  18804,    138, }, /* 885 */
-  {    99,     26,     12,      0,      0,  29020,     74, }, /* 886 */
-  {    30,      6,     12,      0,      0,  18432,    148, }, /* 887 */
-  {    99,      7,     12,      0,      0,  18808,     84, }, /* 888 */
-  {    99,     21,     14,      0,      0,  29048,    250, }, /* 889 */
-  {    99,     26,     12,      0,      0,  29024,     74, }, /* 890 */
-  {    27,      7,     12,      0,      0,  18432,     84, }, /* 891 */
-  {   106,     12,      3,      0,      0,  26996,     98, }, /* 892 */
-  {    99,     24,     12,      0,      0,  29044,    310, }, /* 893 */
-  {    27,      6,     12,      0,      0,  18432,    138, }, /* 894 */
-  {    99,     17,     12,      0,      0,  29044,    130, }, /* 895 */
-  {    28,      7,     12,      0,      0,  18432,     84, }, /* 896 */
-  {    99,     21,     12,      0,      0,  29036,    144, }, /* 897 */
-  {    99,      6,     12,      0,      0,  18804,     96, }, /* 898 */
-  {    28,      6,     12,      0,      0,  18432,    138, }, /* 899 */
-  {    29,      7,     12,      0,      0,  18432,     84, }, /* 900 */
-  {    22,      7,     12,      0,      0,  18432,     84, }, /* 901 */
-  {    22,      7,     12,      0,      0,  18432,    184, }, /* 902 */
-  {    99,     26,     12,      0,      0,  18784,     74, }, /* 903 */
-  {    99,     15,     12,      0,      0,  18784,     74, }, /* 904 */
-  {    22,     26,     12,      0,      0,  18432,     74, }, /* 905 */
-  {    22,     26,     12,      0,      0,  28672,     74, }, /* 906 */
-  {    99,     15,     12,      0,      0,  18432,     74, }, /* 907 */
-  {    99,     26,     14,      0,      0,  18784,    250, }, /* 908 */
-  {    28,     26,     12,      0,      0,  18432,     74, }, /* 909 */
-  {    30,      7,     12,      0,      0,  18432,    312, }, /* 910 */
-  {    31,      7,     12,      0,      0,  18432,     84, }, /* 911 */
-  {    31,      6,     12,      0,      0,  18432,    138, }, /* 912 */
-  {    31,     26,     12,      0,      0,  28672,     74, }, /* 913 */
-  {    55,      7,     12,      0,      0,  18432,     84, }, /* 914 */
-  {    55,      6,     12,      0,      0,  18432,    148, }, /* 915 */
-  {    55,     21,     12,      0,      0,  18432,    110, }, /* 916 */
-  {    55,     21,     12,      0,      0,  18432,    128, }, /* 917 */
-  {   119,      7,     12,      0,      0,  18432,     84, }, /* 918 */
-  {   119,      6,     12,      0,      0,  18432,    138, }, /* 919 */
-  {   119,     21,     12,      0,      0,  28672,    110, }, /* 920 */
-  {   119,     21,     12,      0,      0,  28672,    128, }, /* 921 */
-  {   119,     13,     12,      0,      0,  18432,    144, }, /* 922 */
-  {     2,      9,     12,    108,      1,  18432,     76, }, /* 923 */
-  {     2,      5,     12,    108, -35267,  18432,     78, }, /* 924 */
-  {     2,      7,     12,      0,      0,  18432,     84, }, /* 925 */
-  {     2,     21,     12,      0,      0,  28672,     74, }, /* 926 */
-  {     2,     12,      3,      0,      0,  26624,     98, }, /* 927 */
-  {     2,      6,     12,      0,      0,  28672,     94, }, /* 928 */
-  {     2,      6,     12,      0,      0,  18432,     90, }, /* 929 */
-  {   126,      7,     12,      0,      0,  18432,     84, }, /* 930 */
-  {   126,     14,     12,      0,      0,  18432,     84, }, /* 931 */
-  {   126,     12,      3,      0,      0,  26624,     98, }, /* 932 */
-  {   126,     21,     12,      0,      0,  18432,     74, }, /* 933 */
-  {   126,     21,     12,      0,      0,  18432,    128, }, /* 934 */
-  {   126,     21,     12,      0,      0,  18432,    110, }, /* 935 */
-  {    99,     24,     12,      0,      0,  29052,     56, }, /* 936 */
-  {     0,      9,     12,      0, -35332,  18432,     76, }, /* 937 */
-  {    99,     24,     12,      0,      0,  18432,     56, }, /* 938 */
-  {     0,      9,     12,      0, -42280,  18432,     76, }, /* 939 */
-  {     0,      5,     12,      0,     48,  18432,     78, }, /* 940 */
-  {     0,      9,     12,      0, -42308,  18432,     76, }, /* 941 */
-  {     0,      9,     12,      0, -42319,  18432,     76, }, /* 942 */
-  {     0,      9,     12,      0, -42315,  18432,     76, }, /* 943 */
-  {     0,      9,     12,      0, -42305,  18432,     76, }, /* 944 */
-  {     0,      9,     12,      0, -42258,  18432,     76, }, /* 945 */
-  {     0,      9,     12,      0, -42282,  18432,     76, }, /* 946 */
-  {     0,      9,     12,      0, -42261,  18432,     76, }, /* 947 */
-  {     0,      9,     12,      0,    928,  18432,     76, }, /* 948 */
-  {     0,      9,     12,      0,    -48,  18432,     76, }, /* 949 */
-  {     0,      9,     12,      0, -42307,  18432,     76, }, /* 950 */
-  {     0,      9,     12,      0, -35384,  18432,     76, }, /* 951 */
-  {     0,      9,     12,      0, -42343,  18432,     76, }, /* 952 */
-  {     0,      9,     12,      0, -42561,  18432,     76, }, /* 953 */
-  {    46,      7,     12,      0,      0,  18432,     84, }, /* 954 */
-  {    46,     12,      3,      0,      0,  26624,    106, }, /* 955 */
-  {    46,     12,      3,      0,      0,  26624,    158, }, /* 956 */
-  {    46,     10,      5,      0,      0,  18432,    154, }, /* 957 */
-  {    46,     26,     12,      0,      0,  28672,     74, }, /* 958 */
-  {    99,     15,     12,      0,      0,  18816,     74, }, /* 959 */
-  {    99,     15,     12,      0,      0,  18820,     74, }, /* 960 */
-  {    99,     26,     12,      0,      0,  18824,     74, }, /* 961 */
-  {    99,     23,     12,      0,      0,  14732,     74, }, /* 962 */
-  {    99,     26,     12,      0,      0,  14728,     74, }, /* 963 */
-  {    47,      7,     12,      0,      0,  18432,     84, }, /* 964 */
-  {    47,     21,     12,      0,      0,  28672,     74, }, /* 965 */
-  {    47,     21,     12,      0,      0,  28672,    128, }, /* 966 */
-  {   120,     10,      5,      0,      0,  18432,    154, }, /* 967 */
-  {   120,      7,     12,      0,      0,  18432,     84, }, /* 968 */
-  {   120,     12,      3,      0,      0,  26624,    158, }, /* 969 */
-  {   120,     12,      3,      0,      0,  26624,    106, }, /* 970 */
-  {   120,     21,     12,      0,      0,  18432,    128, }, /* 971 */
-  {   120,     13,     12,      0,      0,  18432,    144, }, /* 972 */
-  {     8,     12,      3,      0,      0,  27024,     98, }, /* 973 */
-  {     8,      7,     12,      0,      0,  18836,     84, }, /* 974 */
-  {    49,     13,     12,      0,      0,  18432,    144, }, /* 975 */
-  {    49,      7,     12,      0,      0,  18432,     84, }, /* 976 */
-  {    49,     12,      3,      0,      0,  26624,    106, }, /* 977 */
-  {    49,     12,      3,      0,      0,  26624,     98, }, /* 978 */
-  {    99,     21,     12,      0,      0,  18840,    200, }, /* 979 */
-  {    49,     21,     12,      0,      0,  18432,    128, }, /* 980 */
-  {   121,      7,     12,      0,      0,  18432,     84, }, /* 981 */
-  {   121,     12,      3,      0,      0,  26624,    106, }, /* 982 */
-  {   121,     10,      5,      0,      0,  18432,    154, }, /* 983 */
-  {   121,     10,      3,      0,      0,  18432,    188, }, /* 984 */
-  {   121,     21,     12,      0,      0,  18432,     74, }, /* 985 */
-  {    56,     12,      3,      0,      0,  26624,    106, }, /* 986 */
-  {    56,     10,      5,      0,      0,  18432,    154, }, /* 987 */
-  {    56,      7,     12,      0,      0,  18432,     84, }, /* 988 */
-  {    56,     12,      3,      0,      0,  26624,     98, }, /* 989 */
-  {    56,     10,      3,      0,      0,  18432,    188, }, /* 990 */
-  {    56,     21,     12,      0,      0,  18432,     74, }, /* 991 */
-  {    56,     21,     12,      0,      0,  18432,    110, }, /* 992 */
-  {    56,     21,     12,      0,      0,  18432,    128, }, /* 993 */
-  {    99,      6,     12,      0,      0,  18844,    138, }, /* 994 */
-  {    56,     13,     12,      0,      0,  18432,    144, }, /* 995 */
-  {    20,      6,     12,      0,      0,  18432,    138, }, /* 996 */
-  {   122,      7,     12,      0,      0,  18432,     84, }, /* 997 */
-  {   122,     12,      3,      0,      0,  26624,    106, }, /* 998 */
-  {   122,     10,      5,      0,      0,  18432,    154, }, /* 999 */
-  {   122,     13,     12,      0,      0,  18432,    144, }, /* 1000 */
-  {   122,     21,     12,      0,      0,  18432,     74, }, /* 1001 */
-  {   122,     21,     12,      0,      0,  18432,    128, }, /* 1002 */
-  {   124,      7,     12,      0,      0,  18432,     84, }, /* 1003 */
-  {   124,     12,      3,      0,      0,  26624,    106, }, /* 1004 */
-  {   124,      7,     12,      0,      0,  18432,    170, }, /* 1005 */
-  {   124,     12,      3,      0,      0,  26624,     98, }, /* 1006 */
-  {   124,      7,     12,      0,      0,  18432,    314, }, /* 1007 */
-  {   124,      6,     12,      0,      0,  18432,    138, }, /* 1008 */
-  {   124,     21,     12,      0,      0,  18432,     74, }, /* 1009 */
-  {   124,     21,     12,      0,      0,  18432,    110, }, /* 1010 */
-  {   127,      7,     12,      0,      0,  18432,     84, }, /* 1011 */
-  {   127,     10,      5,      0,      0,  18432,    154, }, /* 1012 */
-  {   127,     12,      3,      0,      0,  26624,    106, }, /* 1013 */
-  {   127,     21,     12,      0,      0,  18432,    128, }, /* 1014 */
-  {   127,      6,     12,      0,      0,  18432,    138, }, /* 1015 */
-  {   127,     12,      3,      0,      0,  26624,    158, }, /* 1016 */
-  {     0,      5,     12,      0,   -928,  18432,     78, }, /* 1017 */
-  {    24,      5,     12,      0, -38864,  18432,     70, }, /* 1018 */
-  {   127,     10,      5,      0,      0,  18432,    174, }, /* 1019 */
-  {   127,     13,     12,      0,      0,  18432,    144, }, /* 1020 */
-  {    22,      7,      9,      0,      0,  18432,     84, }, /* 1021 */
-  {    22,      7,     10,      0,      0,  18432,     84, }, /* 1022 */
-  {    98,      4,     12,      0,      0,  18432,      0, }, /* 1023 */
-  {    98,      3,     12,      0,      0,  18432,      0, }, /* 1024 */
-  {    30,      7,     12,      0,      0,  18432,    304, }, /* 1025 */
-  {     0,      5,     12,      0,      1,  18432,     70, }, /* 1026 */
-  {     0,      5,     12,      0,     -1,  18432,     70, }, /* 1027 */
-  {     4,     25,     12,      0,      0,  12288,    122, }, /* 1028 */
-  {     5,      7,     12,      0,      0,      0,    316, }, /* 1029 */
-  {    99,     18,     12,      0,      0,  29088,     54, }, /* 1030 */
-  {    99,     22,     12,      0,      0,  29088,     54, }, /* 1031 */
-  {    98,      2,     12,      0,      0,   6144,    318, }, /* 1032 */
-  {     5,      7,     12,      0,      0,    420,     84, }, /* 1033 */
-  {     5,     26,     12,      0,      0,  29092,     74, }, /* 1034 */
-  {   106,     12,      3,      0,      0,  26624,    192, }, /* 1035 */
-  {   106,     12,      3,      0,      0,  26624,    320, }, /* 1036 */
-  {    99,     21,     12,      0,      0,  28672,     74, }, /* 1037 */
-  {    99,     21,     12,      0,      0,  28672,    128, }, /* 1038 */
-  {    99,     21,     12,      0,      0,  28672,    126, }, /* 1039 */
-  {    99,     22,     12,      0,      0,  28672,     74, }, /* 1040 */
-  {    99,     18,     12,      0,      0,  28672,     74, }, /* 1041 */
-  {    99,     17,     12,      0,      0,  28672,    130, }, /* 1042 */
-  {    99,     22,     12,      0,      0,  28672,    322, }, /* 1043 */
-  {    99,     18,     12,      0,      0,  28672,    322, }, /* 1044 */
-  {    99,     21,     12,      0,      0,   8192,    110, }, /* 1045 */
-  {    99,     21,     12,      0,      0,   8192,    324, }, /* 1046 */
-  {    99,     21,     12,      0,      0,   8192,    326, }, /* 1047 */
-  {    99,     22,     12,      0,      0,  28672,    172, }, /* 1048 */
-  {    99,     18,     12,      0,      0,  28672,    172, }, /* 1049 */
-  {    99,     21,     12,      0,      0,  14336,     74, }, /* 1050 */
-  {    99,     21,     12,      0,      0,  28672,    122, }, /* 1051 */
-  {    99,     25,     12,      0,      0,  12288,    122, }, /* 1052 */
-  {    99,     17,     12,      0,      0,  12288,    328, }, /* 1053 */
-  {    99,     25,     12,      0,      0,  28672,    330, }, /* 1054 */
-  {    99,     21,     12,      0,      0,  28672,    322, }, /* 1055 */
-  {    99,     21,     12,      0,      0,  28672,    332, }, /* 1056 */
-  {    99,     17,     12,      0,      0,  12288,    130, }, /* 1057 */
-  {    99,     21,     12,      0,      0,   8192,     74, }, /* 1058 */
-  {    99,     13,     12,      0,      0,  10240,    334, }, /* 1059 */
-  {     0,      9,     12,      0,     32,  18432,    336, }, /* 1060 */
-  {    99,     24,     12,      0,      0,  28672,    338, }, /* 1061 */
-  {     0,      5,     12,      0,    -32,  18432,    340, }, /* 1062 */
-  {    99,     21,     12,      0,      0,  29036,    128, }, /* 1063 */
-  {    99,     22,     12,      0,      0,  29036,    342, }, /* 1064 */
-  {    99,     18,     12,      0,      0,  29036,    342, }, /* 1065 */
-  {    99,     21,     12,      0,      0,  29036,    110, }, /* 1066 */
-  {    99,      6,      3,      0,      0,  18804,    344, }, /* 1067 */
-  {    99,      1,      2,      0,      0,  28672,    346, }, /* 1068 */
-  {    39,      7,     12,      0,      0,  18432,     84, }, /* 1069 */
-  {    99,     21,     12,      0,      0,  18856,     74, }, /* 1070 */
-  {    99,     21,     12,      0,      0,  29096,     74, }, /* 1071 */
-  {    99,     21,     12,      0,      0,  18860,     74, }, /* 1072 */
-  {    99,     15,     12,      0,      0,  18864,     74, }, /* 1073 */
-  {    99,     26,     12,      0,      0,  18860,     74, }, /* 1074 */
-  {     1,     14,     12,      0,      0,  28672,     84, }, /* 1075 */
-  {     1,     15,     12,      0,      0,  28672,     74, }, /* 1076 */
-  {     1,     26,     12,      0,      0,  28672,     74, }, /* 1077 */
-  {     1,     26,     12,      0,      0,  18432,     74, }, /* 1078 */
-  {    50,      7,     12,      0,      0,  18432,     84, }, /* 1079 */
-  {    51,      7,     12,      0,      0,  18432,     84, }, /* 1080 */
-  {   106,     12,      3,      0,      0,  27060,     98, }, /* 1081 */
-  {    99,     15,     12,      0,      0,  10676,     74, }, /* 1082 */
-  {   104,      7,     12,      0,      0,  18432,     84, }, /* 1083 */
-  {   104,     15,     12,      0,      0,  18432,     74, }, /* 1084 */
-  {    32,      7,     12,      0,      0,  18432,     84, }, /* 1085 */
-  {    32,     14,     12,      0,      0,  18432,     84, }, /* 1086 */
-  {    73,      7,     12,      0,      0,  18432,     84, }, /* 1087 */
-  {    73,     12,      3,      0,      0,  26624,    106, }, /* 1088 */
-  {   107,      7,     12,      0,      0,  18432,     84, }, /* 1089 */
-  {   107,     21,     12,      0,      0,  18432,    110, }, /* 1090 */
-  {   111,      7,     12,      0,      0,  18432,     84, }, /* 1091 */
-  {   111,     21,     12,      0,      0,  18432,    110, }, /* 1092 */
-  {   111,     14,     12,      0,      0,  18432,     84, }, /* 1093 */
-  {   105,      9,     12,      0,     40,  18432,     76, }, /* 1094 */
-  {   105,      5,     12,      0,    -40,  18432,     78, }, /* 1095 */
-  {    40,      7,     12,      0,      0,  18432,     84, }, /* 1096 */
-  {   108,      7,     12,      0,      0,  18432,     84, }, /* 1097 */
-  {   108,     13,     12,      0,      0,  18432,    144, }, /* 1098 */
-  {    80,      9,     12,      0,     40,  18432,     76, }, /* 1099 */
-  {    80,      5,     12,      0,    -40,  18432,     78, }, /* 1100 */
-  {    66,      7,     12,      0,      0,  18432,     84, }, /* 1101 */
-  {    64,      7,     12,      0,      0,  18432,     84, }, /* 1102 */
-  {    64,     21,     12,      0,      0,  18432,     74, }, /* 1103 */
-  {   167,      9,     12,      0,     39,  18432,     76, }, /* 1104 */
-  {   167,      5,     12,      0,    -39,  18432,     78, }, /* 1105 */
-  {    96,      7,     12,      0,      0,  18432,     84, }, /* 1106 */
-  {    69,      7,     12,      0,      0,  18432,     84, }, /* 1107 */
-  {     0,      6,     12,      0,      0,  18432,     96, }, /* 1108 */
-  {    41,      7,     12,      0,      0,  34816,     84, }, /* 1109 */
-  {   128,      7,     12,      0,      0,  34816,     84, }, /* 1110 */
-  {   128,     21,     12,      0,      0,  34816,    110, }, /* 1111 */
-  {   128,     15,     12,      0,      0,  34816,     74, }, /* 1112 */
-  {   143,      7,     12,      0,      0,  34816,     84, }, /* 1113 */
-  {   143,     26,     12,      0,      0,  34816,     74, }, /* 1114 */
-  {   143,     15,     12,      0,      0,  34816,     74, }, /* 1115 */
-  {   142,      7,     12,      0,      0,  34816,     84, }, /* 1116 */
-  {   142,     15,     12,      0,      0,  34816,     74, }, /* 1117 */
-  {   149,      7,     12,      0,      0,  34816,     84, }, /* 1118 */
-  {   149,     15,     12,      0,      0,  34816,     74, }, /* 1119 */
-  {   115,      7,     12,      0,      0,  34816,     84, }, /* 1120 */
-  {   115,     15,     12,      0,      0,  34816,     74, }, /* 1121 */
-  {   115,     21,     12,      0,      0,  28672,    110, }, /* 1122 */
-  {    52,      7,     12,      0,      0,  34816,     84, }, /* 1123 */
-  {    52,     21,     12,      0,      0,  34816,     74, }, /* 1124 */
-  {    61,      7,     12,      0,      0,  34816,     84, }, /* 1125 */
-  {   134,      7,     12,      0,      0,  34816,     84, }, /* 1126 */
-  {   134,     15,     12,      0,      0,  34816,     74, }, /* 1127 */
-  {   112,      7,     12,      0,      0,  34816,     84, }, /* 1128 */
-  {   112,     12,      3,      0,      0,  26624,    106, }, /* 1129 */
-  {   112,     12,      3,      0,      0,  26624,     98, }, /* 1130 */
-  {   112,     12,      3,      0,      0,  26624,    158, }, /* 1131 */
-  {   112,     15,     12,      0,      0,  34816,     74, }, /* 1132 */
-  {   112,     21,     12,      0,      0,  34816,     74, }, /* 1133 */
-  {   112,     21,     12,      0,      0,  34816,    128, }, /* 1134 */
-  {   129,      7,     12,      0,      0,  34816,     84, }, /* 1135 */
-  {   129,     15,     12,      0,      0,  34816,     74, }, /* 1136 */
-  {   129,     21,     12,      0,      0,  34816,     74, }, /* 1137 */
-  {   141,      7,     12,      0,      0,  34816,     84, }, /* 1138 */
-  {   141,     15,     12,      0,      0,  34816,     74, }, /* 1139 */
-  {    71,      7,     12,      0,      0,  34816,     84, }, /* 1140 */
-  {    71,     26,     12,      0,      0,  34816,     74, }, /* 1141 */
-  {    71,     12,      3,      0,      0,  26624,     98, }, /* 1142 */
-  {    71,     15,     12,      0,      0,  34816,     74, }, /* 1143 */
-  {    71,     21,     12,      0,      0,  34816,    110, }, /* 1144 */
-  {    71,     21,     12,      0,      0,  35256,    110, }, /* 1145 */
-  {    71,     21,     12,      0,      0,  34816,     74, }, /* 1146 */
-  {    53,      7,     12,      0,      0,  34816,     84, }, /* 1147 */
-  {    53,     21,     12,      0,      0,  28672,     74, }, /* 1148 */
-  {    53,     21,     12,      0,      0,  28672,    110, }, /* 1149 */
-  {   130,      7,     12,      0,      0,  34816,     84, }, /* 1150 */
-  {   130,     15,     12,      0,      0,  34816,     74, }, /* 1151 */
-  {   131,      7,     12,      0,      0,  34816,     84, }, /* 1152 */
-  {   131,     15,     12,      0,      0,  34816,     74, }, /* 1153 */
-  {    74,      7,     12,      0,      0,  34816,     84, }, /* 1154 */
-  {    74,     21,     12,      0,      0,  34816,    110, }, /* 1155 */
-  {    74,     15,     12,      0,      0,  34816,     74, }, /* 1156 */
-  {    57,      7,     12,      0,      0,  34816,     84, }, /* 1157 */
-  {    78,      9,     12,      0,     64,  34816,     76, }, /* 1158 */
-  {    78,      5,     12,      0,    -64,  34816,     78, }, /* 1159 */
-  {    78,     15,     12,      0,      0,  34816,     74, }, /* 1160 */
-  {    85,      7,     12,      0,      0,      0,     84, }, /* 1161 */
-  {    85,      7,     12,      0,      0,      0,    314, }, /* 1162 */
-  {    85,     12,      3,      0,      0,  26624,    132, }, /* 1163 */
-  {    85,     13,     12,      0,      0,   2048,    144, }, /* 1164 */
-  {    92,     13,     12,      0,      0,   2048,    144, }, /* 1165 */
-  {    92,      7,     12,      0,      0,  34816,     84, }, /* 1166 */
-  {    92,      6,     12,      0,      0,  34816,     96, }, /* 1167 */
-  {    92,      9,     12,      0,     32,  34816,     76, }, /* 1168 */
-  {    92,     12,      3,      0,      0,  26624,    132, }, /* 1169 */
-  {    92,     12,      3,      0,      0,  26624,    164, }, /* 1170 */
-  {    92,     12,      3,      0,      0,  26624,     98, }, /* 1171 */
-  {    92,     17,     12,      0,      0,  28672,    130, }, /* 1172 */
-  {    92,      6,     12,      0,      0,  34816,    138, }, /* 1173 */
-  {    92,      5,     12,      0,    -32,  34816,     78, }, /* 1174 */
-  {    92,     25,     12,      0,      0,  34816,    122, }, /* 1175 */
-  {     5,     15,     12,      0,      0,   2048,     74, }, /* 1176 */
-  {    88,      7,     12,      0,      0,  34816,     84, }, /* 1177 */
-  {    88,     12,      3,      0,      0,  26624,    106, }, /* 1178 */
-  {    88,     17,     12,      0,      0,  34816,    130, }, /* 1179 */
-  {   159,      7,     12,      0,      0,  34816,     84, }, /* 1180 */
-  {   159,     15,     12,      0,      0,  34816,     74, }, /* 1181 */
-  {    86,      7,     12,      0,      0,      0,     84, }, /* 1182 */
-  {    86,     12,      3,      0,      0,  26624,     98, }, /* 1183 */
-  {    86,     15,     12,      0,      0,      0,     74, }, /* 1184 */
-  {    86,     21,     12,      0,      0,      0,    128, }, /* 1185 */
-  {    90,      7,     12,      0,      0,  34816,     84, }, /* 1186 */
-  {    90,     12,      3,      0,      0,  26624,     98, }, /* 1187 */
-  {    90,     21,     12,      0,      0,  34816,    128, }, /* 1188 */
-  {   163,      7,     12,      0,      0,  34816,     84, }, /* 1189 */
-  {   163,     15,     12,      0,      0,  34816,     74, }, /* 1190 */
-  {   160,      7,     12,      0,      0,  34816,     84, }, /* 1191 */
-  {   133,     10,      5,      0,      0,  18432,    154, }, /* 1192 */
-  {   133,     12,      3,      0,      0,  26624,    106, }, /* 1193 */
-  {   133,      7,     12,      0,      0,  18432,     84, }, /* 1194 */
-  {   133,     12,      3,      0,      0,  26624,    158, }, /* 1195 */
-  {   133,     21,     12,      0,      0,  18432,    128, }, /* 1196 */
-  {   133,     21,     12,      0,      0,  18432,    110, }, /* 1197 */
-  {   133,     15,     12,      0,      0,  28672,     74, }, /* 1198 */
-  {   133,     13,     12,      0,      0,  18432,    144, }, /* 1199 */
-  {   133,     12,      3,      0,      0,  26624,    290, }, /* 1200 */
-  {    58,     12,      3,      0,      0,  26624,    106, }, /* 1201 */
-  {    58,     10,      5,      0,      0,  18432,    154, }, /* 1202 */
-  {    58,      7,     12,      0,      0,  18432,     84, }, /* 1203 */
-  {    58,     12,      3,      0,      0,  26624,    158, }, /* 1204 */
-  {    58,     12,      3,      0,      0,  26624,     98, }, /* 1205 */
-  {    58,     21,     12,      0,      0,  18432,     74, }, /* 1206 */
-  {    58,      1,      4,      0,      0,  18432,    134, }, /* 1207 */
-  {    58,     21,     12,      0,      0,  18432,    128, }, /* 1208 */
-  {   136,      7,     12,      0,      0,  18432,     84, }, /* 1209 */
-  {   136,     13,     12,      0,      0,  18432,    144, }, /* 1210 */
-  {    60,     12,      3,      0,      0,  26624,    106, }, /* 1211 */
-  {    60,      7,     12,      0,      0,  18432,     84, }, /* 1212 */
-  {    60,     10,      5,      0,      0,  18432,    154, }, /* 1213 */
-  {    60,     12,      3,      0,      0,  26624,    158, }, /* 1214 */
-  {    60,     13,     12,      0,      0,  18432,    144, }, /* 1215 */
-  {    60,     21,     12,      0,      0,  18432,     74, }, /* 1216 */
-  {    60,     21,     12,      0,      0,  18432,    128, }, /* 1217 */
-  {    70,      7,     12,      0,      0,  18432,     84, }, /* 1218 */
-  {    70,     12,      3,      0,      0,  26624,     98, }, /* 1219 */
-  {    70,     21,     12,      0,      0,  18432,     74, }, /* 1220 */
-  {    62,     12,      3,      0,      0,  26624,    106, }, /* 1221 */
-  {    62,     10,      5,      0,      0,  18432,    154, }, /* 1222 */
-  {    62,      7,     12,      0,      0,  18432,     84, }, /* 1223 */
-  {    62,     10,      3,      0,      0,  18432,    188, }, /* 1224 */
-  {    62,      7,      4,      0,      0,  18432,     84, }, /* 1225 */
-  {    62,     21,     12,      0,      0,  18432,    128, }, /* 1226 */
-  {    62,     21,     12,      0,      0,  18432,     74, }, /* 1227 */
-  {    62,     12,      3,      0,      0,  26624,    104, }, /* 1228 */
-  {    62,     12,      3,      0,      0,  26624,     98, }, /* 1229 */
-  {    62,     13,     12,      0,      0,  18432,    144, }, /* 1230 */
-  {    17,     15,     12,      0,      0,  18432,     74, }, /* 1231 */
-  {    68,      7,     12,      0,      0,  18432,     84, }, /* 1232 */
-  {    68,     10,      5,      0,      0,  18432,    154, }, /* 1233 */
-  {    68,     12,      3,      0,      0,  26624,    106, }, /* 1234 */
-  {    68,     10,      3,      0,      0,  18432,    188, }, /* 1235 */
-  {    68,     12,      3,      0,      0,  26624,     98, }, /* 1236 */
-  {    68,     12,      3,      0,      0,  26624,    162, }, /* 1237 */
-  {    68,     21,     12,      0,      0,  18432,    128, }, /* 1238 */
-  {    68,     21,     12,      0,      0,  18432,    110, }, /* 1239 */
-  {    68,     21,     12,      0,      0,  18432,     74, }, /* 1240 */
-  {    77,      7,     12,      0,      0,  18432,     84, }, /* 1241 */
-  {    77,     21,     12,      0,      0,  18432,    128, }, /* 1242 */
-  {    75,      7,     12,      0,      0,  18432,     84, }, /* 1243 */
-  {    75,     12,      3,      0,      0,  26624,    106, }, /* 1244 */
-  {    75,     10,      5,      0,      0,  18432,    154, }, /* 1245 */
-  {    75,     12,      3,      0,      0,  26624,     98, }, /* 1246 */
-  {    75,     12,      3,      0,      0,  26624,    158, }, /* 1247 */
-  {    75,     13,     12,      0,      0,  18432,    144, }, /* 1248 */
-  {    67,     12,      3,      0,      0,  26624,    106, }, /* 1249 */
-  {    67,     12,      3,      0,      0,  26836,    106, }, /* 1250 */
-  {    67,     10,      5,      0,      0,  18432,    154, }, /* 1251 */
-  {    67,     10,      5,      0,      0,  18644,    154, }, /* 1252 */
-  {    67,      7,     12,      0,      0,  18432,     84, }, /* 1253 */
-  {   106,     12,      3,      0,      0,  26836,     98, }, /* 1254 */
-  {    67,     12,      3,      0,      0,  26836,     98, }, /* 1255 */
-  {    67,     10,      3,      0,      0,  18432,    160, }, /* 1256 */
-  {    67,     10,      3,      0,      0,  18432,    188, }, /* 1257 */
-  {    67,      7,     12,      0,      0,  18432,    348, }, /* 1258 */
-  {    67,     12,      3,      0,      0,  26624,     98, }, /* 1259 */
-  {    97,      7,     12,      0,      0,  18432,     84, }, /* 1260 */
-  {    97,     10,      3,      0,      0,  18432,    160, }, /* 1261 */
-  {    97,     10,      5,      0,      0,  18432,    154, }, /* 1262 */
-  {    97,     12,      3,      0,      0,  26624,    106, }, /* 1263 */
-  {    97,     12,      3,      0,      0,  26624,    158, }, /* 1264 */
-  {    97,     10,      3,      0,      0,  18432,    188, }, /* 1265 */
-  {    97,      7,      4,      0,      0,  18432,     84, }, /* 1266 */
-  {    97,     12,      3,      0,      0,  26624,    164, }, /* 1267 */
-  {    97,      7,     12,      0,      0,  18432,    350, }, /* 1268 */
-  {    97,     21,     12,      0,      0,  18432,    128, }, /* 1269 */
-  {    97,     21,     12,      0,      0,  18432,     74, }, /* 1270 */
-  {    97,     12,      3,      0,      0,  26624,     98, }, /* 1271 */
-  {   153,      7,     12,      0,      0,  18432,     84, }, /* 1272 */
-  {   153,     10,      5,      0,      0,  18432,    154, }, /* 1273 */
-  {   153,     12,      3,      0,      0,  26624,    106, }, /* 1274 */
-  {   153,     12,      3,      0,      0,  26624,    158, }, /* 1275 */
-  {   153,     12,      3,      0,      0,  26624,     98, }, /* 1276 */
-  {   153,     21,     12,      0,      0,  18432,    128, }, /* 1277 */
-  {   153,     21,     12,      0,      0,  18432,    110, }, /* 1278 */
-  {   153,     21,     12,      0,      0,  18432,     74, }, /* 1279 */
-  {   153,     13,     12,      0,      0,  18432,    144, }, /* 1280 */
-  {   153,     12,      3,      0,      0,  26624,    104, }, /* 1281 */
-  {    76,      7,     12,      0,      0,  18432,     84, }, /* 1282 */
-  {    76,     10,      3,      0,      0,  18432,    160, }, /* 1283 */
-  {    76,     10,      5,      0,      0,  18432,    154, }, /* 1284 */
-  {    76,     12,      3,      0,      0,  26624,    106, }, /* 1285 */
-  {    76,     12,      3,      0,      0,  26624,    158, }, /* 1286 */
-  {    76,     12,      3,      0,      0,  26624,     98, }, /* 1287 */
-  {    76,     21,     12,      0,      0,  18432,     74, }, /* 1288 */
-  {    76,     13,     12,      0,      0,  18432,    144, }, /* 1289 */
-  {   145,      7,     12,      0,      0,  18432,     84, }, /* 1290 */
-  {   145,     10,      3,      0,      0,  18432,    160, }, /* 1291 */
-  {   145,     10,      5,      0,      0,  18432,    154, }, /* 1292 */
-  {   145,     12,      3,      0,      0,  26624,    106, }, /* 1293 */
-  {   145,     12,      3,      0,      0,  26624,    158, }, /* 1294 */
-  {   145,     12,      3,      0,      0,  26624,     98, }, /* 1295 */
-  {   145,     21,     12,      0,      0,  18432,     74, }, /* 1296 */
-  {   145,     21,     12,      0,      0,  18432,    128, }, /* 1297 */
-  {   145,     21,     12,      0,      0,  18432,    110, }, /* 1298 */
-  {   145,     21,     12,      0,      0,  18432,    190, }, /* 1299 */
-  {    72,      7,     12,      0,      0,  18432,     84, }, /* 1300 */
-  {    72,     10,      5,      0,      0,  18432,    154, }, /* 1301 */
-  {    72,     12,      3,      0,      0,  26624,    106, }, /* 1302 */
-  {    72,     12,      3,      0,      0,  26624,    158, }, /* 1303 */
-  {    72,     21,     12,      0,      0,  18432,    128, }, /* 1304 */
-  {    72,     21,     12,      0,      0,  18432,     74, }, /* 1305 */
-  {    72,     13,     12,      0,      0,  18432,    144, }, /* 1306 */
-  {    63,      7,     12,      0,      0,  18432,     84, }, /* 1307 */
-  {    63,     12,      3,      0,      0,  26624,    106, }, /* 1308 */
-  {    63,     10,      5,      0,      0,  18432,    154, }, /* 1309 */
-  {    63,     10,      3,      0,      0,  18432,    188, }, /* 1310 */
-  {    63,     12,      3,      0,      0,  26624,     98, }, /* 1311 */
-  {    63,     21,     12,      0,      0,  18432,     74, }, /* 1312 */
-  {    63,     13,     12,      0,      0,  18432,    144, }, /* 1313 */
-  {   147,      7,     12,      0,      0,  18432,     84, }, /* 1314 */
-  {   147,     12,      3,      0,      0,  26624,    106, }, /* 1315 */
-  {   147,     10,      5,      0,      0,  18432,    154, }, /* 1316 */
-  {   147,     10,     12,      0,      0,  18432,    154, }, /* 1317 */
-  {   147,     12,      3,      0,      0,  26624,    158, }, /* 1318 */
-  {   147,     13,     12,      0,      0,  18432,    144, }, /* 1319 */
-  {   147,     15,     12,      0,      0,  18432,     74, }, /* 1320 */
-  {   147,     21,     12,      0,      0,  18432,    128, }, /* 1321 */
-  {   147,     26,     12,      0,      0,  18432,     74, }, /* 1322 */
-  {    83,      7,     12,      0,      0,  18432,     84, }, /* 1323 */
-  {    83,     10,      5,      0,      0,  18432,    154, }, /* 1324 */
-  {    83,     12,      3,      0,      0,  26624,    106, }, /* 1325 */
-  {    83,     12,      3,      0,      0,  26624,    158, }, /* 1326 */
-  {    83,     12,      3,      0,      0,  26624,     98, }, /* 1327 */
-  {    83,     21,     12,      0,      0,  18432,     74, }, /* 1328 */
-  {   146,      9,     12,      0,     32,  18432,     76, }, /* 1329 */
-  {   146,      5,     12,      0,    -32,  18432,     78, }, /* 1330 */
-  {   146,     13,     12,      0,      0,  18432,    144, }, /* 1331 */
-  {   146,     15,     12,      0,      0,  18432,     74, }, /* 1332 */
-  {   146,      7,     12,      0,      0,  18432,     84, }, /* 1333 */
-  {   164,      7,     12,      0,      0,  18432,     84, }, /* 1334 */
-  {   164,     10,      3,      0,      0,  18432,    160, }, /* 1335 */
-  {   164,     10,      5,      0,      0,  18432,    154, }, /* 1336 */
-  {   164,     12,      3,      0,      0,  26624,    106, }, /* 1337 */
-  {   164,     10,      3,      0,      0,  18432,    188, }, /* 1338 */
-  {   164,     12,      3,      0,      0,  26624,    158, }, /* 1339 */
-  {   164,      7,      4,      0,      0,  18432,     84, }, /* 1340 */
-  {   164,     12,      3,      0,      0,  26624,     98, }, /* 1341 */
-  {   164,     21,     12,      0,      0,  18432,    128, }, /* 1342 */
-  {   164,     21,     12,      0,      0,  18432,     74, }, /* 1343 */
-  {   164,     13,     12,      0,      0,  18432,    144, }, /* 1344 */
-  {    87,      7,     12,      0,      0,  18432,     84, }, /* 1345 */
-  {    87,     10,      5,      0,      0,  18432,    154, }, /* 1346 */
-  {    87,     12,      3,      0,      0,  26624,    106, }, /* 1347 */
-  {    87,     12,      3,      0,      0,  26624,    158, }, /* 1348 */
-  {    87,     21,     12,      0,      0,  18432,     74, }, /* 1349 */
-  {   156,      7,     12,      0,      0,  18432,     84, }, /* 1350 */
-  {   156,     12,      3,      0,      0,  26624,    106, }, /* 1351 */
-  {   156,     12,      3,      0,      0,  18432,    106, }, /* 1352 */
-  {   156,     12,      3,      0,      0,  26624,    104, }, /* 1353 */
-  {   156,     12,      3,      0,      0,  26624,    158, }, /* 1354 */
-  {   156,     10,      5,      0,      0,  18432,    154, }, /* 1355 */
-  {   156,      7,      4,      0,      0,  18432,     84, }, /* 1356 */
-  {   156,     21,     12,      0,      0,  18432,     74, }, /* 1357 */
-  {   156,     21,     12,      0,      0,  18432,    128, }, /* 1358 */
-  {   155,      7,     12,      0,      0,  18432,     84, }, /* 1359 */
-  {   155,     12,      3,      0,      0,  26624,    106, }, /* 1360 */
-  {   155,     10,      5,      0,      0,  18432,    154, }, /* 1361 */
-  {   155,      7,      4,      0,      0,  18432,     84, }, /* 1362 */
-  {   155,     12,      3,      0,      0,  26624,    352, }, /* 1363 */
-  {   155,     12,      3,      0,      0,  26624,    158, }, /* 1364 */
-  {   155,     21,     12,      0,      0,  18432,     74, }, /* 1365 */
-  {   155,     21,     12,      0,      0,  18432,    128, }, /* 1366 */
-  {   155,     21,     12,      0,      0,  18432,    110, }, /* 1367 */
-  {   144,      7,     12,      0,      0,  18432,     84, }, /* 1368 */
-  {    95,      7,     12,      0,      0,  18432,     84, }, /* 1369 */
-  {    95,     21,     12,      0,      0,  18432,     74, }, /* 1370 */
-  {    95,     13,     12,      0,      0,  18432,    144, }, /* 1371 */
-  {   151,      7,     12,      0,      0,  18432,     84, }, /* 1372 */
-  {   151,     10,      5,      0,      0,  18432,    154, }, /* 1373 */
-  {   151,     12,      3,      0,      0,  26624,    106, }, /* 1374 */
-  {   151,     12,      3,      0,      0,  18432,    158, }, /* 1375 */
-  {   151,     21,     12,      0,      0,  18432,    128, }, /* 1376 */
-  {   151,     21,     12,      0,      0,  18432,    110, }, /* 1377 */
-  {   151,     21,     12,      0,      0,  18432,     74, }, /* 1378 */
-  {   151,     13,     12,      0,      0,  18432,    144, }, /* 1379 */
-  {   151,     15,     12,      0,      0,  18432,     74, }, /* 1380 */
-  {   152,     21,     12,      0,      0,  18432,     74, }, /* 1381 */
-  {   152,     21,     12,      0,      0,  18432,    110, }, /* 1382 */
-  {   152,      7,     12,      0,      0,  18432,     84, }, /* 1383 */
-  {   152,     12,      3,      0,      0,  26624,    106, }, /* 1384 */
+  {   119,     13,     12,      0,      0,  18432,    144, }, /* 657 */
+  {   119,      7,     12,      0,      0,  18432,     84, }, /* 658 */
+  {   119,      6,     12,      0,      0,  18432,     94, }, /* 659 */
+  {   119,      6,     12,      0,      0,  18432,     96, }, /* 660 */
+  {   119,     21,     12,      0,      0,  18432,    128, }, /* 661 */
+  {     2,      5,     12,     63,  -6222,  18432,     70, }, /* 662 */
+  {     2,      5,     12,     67,  -6221,  18432,     70, }, /* 663 */
+  {     2,      5,     12,     71,  -6212,  18432,     70, }, /* 664 */
+  {     2,      5,     12,     75,  -6210,  18432,     70, }, /* 665 */
+  {     2,      5,     12,     79,  -6210,  18432,     70, }, /* 666 */
+  {     2,      5,     12,     79,  -6211,  18432,     70, }, /* 667 */
+  {     2,      5,     12,     84,  -6204,  18432,     70, }, /* 668 */
+  {     2,      5,     12,     88,  -6180,  18432,     70, }, /* 669 */
+  {     2,      5,     12,    108,  35267,  18432,     70, }, /* 670 */
+  {    21,      9,     12,      0,  -3008,  18432,     76, }, /* 671 */
+  {   117,     21,     12,      0,      0,  18432,     74, }, /* 672 */
+  {   107,     12,      3,      0,      0,  26864,     98, }, /* 673 */
+  {   107,     12,      3,      0,      0,  26868,     98, }, /* 674 */
+  {   100,     21,     12,      0,      0,  18680,    202, }, /* 675 */
+  {   107,     12,      3,      0,      0,  26876,     98, }, /* 676 */
+  {   107,     12,      3,      0,      0,  26880,     98, }, /* 677 */
+  {   107,     12,      3,      0,      0,  26884,     98, }, /* 678 */
+  {   107,     12,      3,      0,      0,  26888,     98, }, /* 679 */
+  {   107,     12,      3,      0,      0,  26892,     98, }, /* 680 */
+  {   107,     12,      3,      0,      0,  26896,     98, }, /* 681 */
+  {   100,     10,      5,      0,      0,  18708,    174, }, /* 682 */
+  {   107,     12,      3,      0,      0,  26904,     98, }, /* 683 */
+  {   100,      7,     12,      0,      0,  18716,     84, }, /* 684 */
+  {   100,      7,     12,      0,      0,  18720,     84, }, /* 685 */
+  {   100,      7,     12,      0,      0,  18724,     84, }, /* 686 */
+  {   100,      7,     12,      0,      0,  18676,     84, }, /* 687 */
+  {   107,     12,      3,      0,      0,  26920,     98, }, /* 688 */
+  {   100,      7,     12,      0,      0,  18732,     84, }, /* 689 */
+  {   100,      7,     12,      0,      0,  18736,     84, }, /* 690 */
+  {   107,     12,      3,      0,      0,  26932,     98, }, /* 691 */
+  {   100,      7,     12,      0,      0,  18708,     84, }, /* 692 */
+  {   100,     10,      5,      0,      0,  18744,    174, }, /* 693 */
+  {   107,     12,      3,      0,      0,  26928,     98, }, /* 694 */
+  {   100,      7,     12,      0,      0,  18748,     84, }, /* 695 */
+  {     2,      5,     12,      0,      0,  18432,     60, }, /* 696 */
+  {     1,      6,     12,      0,      0,  18432,     90, }, /* 697 */
+  {     2,      6,     12,      0,      0,  18432,    182, }, /* 698 */
+  {     0,      5,     12,      0,  35332,  18432,     78, }, /* 699 */
+  {     0,      5,     12,      0,   3814,  18432,     78, }, /* 700 */
+  {     0,      5,     12,      0,  35384,  18432,     78, }, /* 701 */
+  {     0,      5,     12,      0,      0,  18432,    204, }, /* 702 */
+  {     1,      6,     12,      0,      0,  18432,    182, }, /* 703 */
+  {   107,     12,      3,      0,      0,  26740,    104, }, /* 704 */
+  {   107,     12,      3,      0,      0,  26944,     98, }, /* 705 */
+  {   107,     12,      3,      0,      0,  26948,     98, }, /* 706 */
+  {     0,      9,     12,     92,      1,  18432,     76, }, /* 707 */
+  {     0,      5,     12,     92,     -1,  18432,     78, }, /* 708 */
+  {     0,      5,     12,      0,      0,  18432,     70, }, /* 709 */
+  {     0,      5,     12,     92,    -58,  18432,     70, }, /* 710 */
+  {     0,      9,     12,      0,  -7615,  18432,     76, }, /* 711 */
+  {     1,      5,     12,      0,      8,  18432,     78, }, /* 712 */
+  {     1,      9,     12,      0,     -8,  18432,     76, }, /* 713 */
+  {     1,      5,     12,      0,      0,  18432,     78, }, /* 714 */
+  {     1,      5,     12,      0,     74,  18432,     78, }, /* 715 */
+  {     1,      5,     12,      0,     86,  18432,     78, }, /* 716 */
+  {     1,      5,     12,      0,    100,  18432,     78, }, /* 717 */
+  {     1,      5,     12,      0,    128,  18432,     78, }, /* 718 */
+  {     1,      5,     12,      0,    112,  18432,     78, }, /* 719 */
+  {     1,      5,     12,      0,    126,  18432,     78, }, /* 720 */
+  {     1,      5,     12,      0,      8,  18432,     70, }, /* 721 */
+  {     1,      8,     12,      0,     -8,  18432,     88, }, /* 722 */
+  {     1,      5,     12,      0,      0,  18432,     70, }, /* 723 */
+  {     1,      5,     12,      0,      9,  18432,     70, }, /* 724 */
+  {     1,      9,     12,      0,    -74,  18432,     76, }, /* 725 */
+  {     1,      8,     12,      0,     -9,  18432,     88, }, /* 726 */
+  {     1,      5,     12,     21,  -7173,  18432,     78, }, /* 727 */
+  {     1,      9,     12,      0,    -86,  18432,     76, }, /* 728 */
+  {     1,      5,     12,      0,  -7235,  18432,     78, }, /* 729 */
+  {     1,      9,     12,      0,   -100,  18432,     76, }, /* 730 */
+  {     1,      5,     12,      0,  -7219,  18432,     78, }, /* 731 */
+  {     1,      9,     12,      0,   -112,  18432,     76, }, /* 732 */
+  {     1,      9,     12,      0,   -128,  18432,     76, }, /* 733 */
+  {     1,      9,     12,      0,   -126,  18432,     76, }, /* 734 */
+  {   100,     29,     12,      0,      0,  45056,     52, }, /* 735 */
+  {   107,      1,      3,      0,      0,   6144,    206, }, /* 736 */
+  {   107,      1,     13,      0,      0,   6144,    208, }, /* 737 */
+  {   100,      1,      2,      0,      0,  18432,    210, }, /* 738 */
+  {   100,      1,      2,      0,      0,  34816,    210, }, /* 739 */
+  {   100,     17,     12,      0,      0,  28672,    212, }, /* 740 */
+  {   100,     21,     12,      0,      0,  28672,     64, }, /* 741 */
+  {   100,     20,     12,      0,      0,  28672,    214, }, /* 742 */
+  {   100,     19,     12,      0,      0,  28672,    214, }, /* 743 */
+  {   100,     22,     12,      0,      0,  28672,    216, }, /* 744 */
+  {   100,     20,     12,      0,      0,  28672,    216, }, /* 745 */
+  {   100,     19,     12,      0,      0,  28672,    216, }, /* 746 */
+  {   100,     21,     12,      0,      0,  28672,    218, }, /* 747 */
+  {   100,     21,     12,      0,      0,  28672,    220, }, /* 748 */
+  {   100,     27,      2,      0,      0,  45056,     50, }, /* 749 */
+  {   100,     28,      2,      0,      0,   4096,     50, }, /* 750 */
+  {   100,      1,      2,      0,      0,  20480,    136, }, /* 751 */
+  {   100,      1,      2,      0,      0,  36864,    136, }, /* 752 */
+  {   100,      1,      2,      0,      0,  30720,    136, }, /* 753 */
+  {   100,      1,      2,      0,      0,  24576,    136, }, /* 754 */
+  {   100,      1,      2,      0,      0,  40960,    136, }, /* 755 */
+  {   100,     29,     12,      0,      0,   8520,     52, }, /* 756 */
+  {   100,     21,     12,      0,      0,  14336,     54, }, /* 757 */
+  {   100,     21,     12,      0,      0,  14336,     64, }, /* 758 */
+  {   100,     21,     14,      0,      0,  28672,    222, }, /* 759 */
+  {   100,     21,     12,      0,      0,  28672,    224, }, /* 760 */
+  {   100,     16,     12,      0,      0,  28672,    144, }, /* 761 */
+  {   100,     16,     12,      0,      0,  28672,    226, }, /* 762 */
+  {   100,     25,     12,      0,      0,   8192,     64, }, /* 763 */
+  {   100,     22,     12,      0,      0,  28672,    228, }, /* 764 */
+  {   100,     18,     12,      0,      0,  28672,    228, }, /* 765 */
+  {   100,     21,     12,      0,      0,  29004,     54, }, /* 766 */
+  {   100,     21,     12,      0,      0,  28672,    212, }, /* 767 */
+  {   100,     21,     12,      0,      0,  29008,     54, }, /* 768 */
+  {   100,     21,     12,      0,      0,  29012,     54, }, /* 769 */
+  {   100,      1,      2,      0,      0,   6144,    230, }, /* 770 */
+  {    99,      2,      2,      0,      0,   6144,    232, }, /* 771 */
+  {   100,      1,      2,      0,      0,  22528,    136, }, /* 772 */
+  {   100,      1,      2,      0,      0,  38912,    136, }, /* 773 */
+  {   100,      1,      2,      0,      0,  16384,    136, }, /* 774 */
+  {   100,      1,      2,      0,      0,  32768,    136, }, /* 775 */
+  {   100,      1,      2,      0,      0,   6144,    234, }, /* 776 */
+  {     0,      6,     12,      0,      0,  18432,    236, }, /* 777 */
+  {   100,     25,     12,      0,      0,  12288,    238, }, /* 778 */
+  {   100,     25,     12,      0,      0,  12288,    240, }, /* 779 */
+  {   100,     25,     12,      0,      0,  28672,    238, }, /* 780 */
+  {   100,     22,     12,      0,      0,  28672,    242, }, /* 781 */
+  {   100,     18,     12,      0,      0,  28672,    242, }, /* 782 */
+  {     0,      6,     12,      0,      0,  18432,    182, }, /* 783 */
+  {    99,      2,     12,      0,      0,  14336,      0, }, /* 784 */
+  {   107,     12,      3,      0,      0,  26624,    244, }, /* 785 */
+  {   107,     11,      3,      0,      0,  26624,    124, }, /* 786 */
+  {   107,     11,      3,      0,      0,  26624,    246, }, /* 787 */
+  {   107,     12,      3,      0,      0,  26968,    104, }, /* 788 */
+  {   100,     26,     12,      0,      0,  28672,     74, }, /* 789 */
+  {   100,      9,     12,      0,      0,  18432,    116, }, /* 790 */
+  {   100,      5,     12,      0,      0,  18432,    248, }, /* 791 */
+  {   100,     25,     12,      0,      0,  28672,    250, }, /* 792 */
+  {   100,     26,     14,      0,      0,  28672,    252, }, /* 793 */
+  {     1,      9,     12,     96,  -7517,  18432,     76, }, /* 794 */
+  {   100,     26,     12,      0,      0,  28672,    122, }, /* 795 */
+  {     0,      9,     12,    100,      0,  18432,     76, }, /* 796 */
+  {     0,      9,     12,    104,  -8262,  18432,     76, }, /* 797 */
+  {   100,     26,     12,      0,      0,  14336,    254, }, /* 798 */
+  {     0,      9,     12,      0,     28,  18432,     76, }, /* 799 */
+  {   100,      7,     12,      0,      0,  18432,    256, }, /* 800 */
+  {   100,      5,     14,      0,      0,  18432,    258, }, /* 801 */
+  {   100,     25,     12,      0,      0,  28672,    122, }, /* 802 */
+  {   100,      5,     12,      0,      0,  18432,    260, }, /* 803 */
+  {     0,      5,     12,      0,    -28,  18432,     78, }, /* 804 */
+  {     0,     14,     12,      0,     16,  18432,     76, }, /* 805 */
+  {     0,     14,     12,      0,    -16,  18432,     78, }, /* 806 */
+  {     0,     14,     12,      0,      0,  18432,     84, }, /* 807 */
+  {   100,     25,     14,      0,      0,  28672,    262, }, /* 808 */
+  {   100,     26,     14,      0,      0,  28672,    262, }, /* 809 */
+  {   100,     26,     12,      0,      0,  28672,     64, }, /* 810 */
+  {   100,     25,     12,      0,      0,  28672,    264, }, /* 811 */
+  {   100,     25,     12,      0,      0,  28672,    266, }, /* 812 */
+  {   100,     25,     12,      0,      0,  12288,    268, }, /* 813 */
+  {   100,     22,     12,      0,      0,  28672,    266, }, /* 814 */
+  {   100,     18,     12,      0,      0,  28672,    266, }, /* 815 */
+  {   100,     26,     14,      0,      0,  28672,    270, }, /* 816 */
+  {   100,     22,     12,      0,      0,  28672,    272, }, /* 817 */
+  {   100,     18,     12,      0,      0,  28672,    272, }, /* 818 */
+  {   100,     26,     12,      0,      0,  18432,     54, }, /* 819 */
+  {    99,      2,     12,      0,      0,  18432,    274, }, /* 820 */
+  {   100,     15,     12,      0,      0,  10240,     74, }, /* 821 */
+  {   100,     26,     12,      0,     26,  18432,    276, }, /* 822 */
+  {   100,     26,     14,      0,     26,  18432,    278, }, /* 823 */
+  {   100,     26,     12,      0,    -26,  18432,    280, }, /* 824 */
+  {   100,     25,     14,      0,      0,  28672,    282, }, /* 825 */
+  {   100,     26,     14,      0,      0,  28672,    284, }, /* 826 */
+  {   100,     26,     14,      0,      0,  28672,    286, }, /* 827 */
+  {   110,     26,     12,      0,      0,  18432,     54, }, /* 828 */
+  {   100,     26,     12,      0,      0,  28672,    228, }, /* 829 */
+  {    44,      9,     12,      0,     48,  18432,     76, }, /* 830 */
+  {    44,      5,     12,      0,    -48,  18432,     78, }, /* 831 */
+  {     0,      9,     12,      0, -10743,  18432,     76, }, /* 832 */
+  {     0,      9,     12,      0,  -3814,  18432,     76, }, /* 833 */
+  {     0,      9,     12,      0, -10727,  18432,     76, }, /* 834 */
+  {     0,      5,     12,      0, -10795,  18432,     78, }, /* 835 */
+  {     0,      5,     12,      0, -10792,  18432,     78, }, /* 836 */
+  {     0,      9,     12,      0, -10780,  18432,     76, }, /* 837 */
+  {     0,      9,     12,      0, -10749,  18432,     76, }, /* 838 */
+  {     0,      9,     12,      0, -10783,  18432,     76, }, /* 839 */
+  {     0,      9,     12,      0, -10782,  18432,     76, }, /* 840 */
+  {     0,      9,     12,      0, -10815,  18432,     76, }, /* 841 */
+  {    43,      5,     12,      0,      0,  18432,     60, }, /* 842 */
+  {    43,     26,     12,      0,      0,  28672,     74, }, /* 843 */
+  {    43,     12,      3,      0,      0,  26624,     98, }, /* 844 */
+  {    43,     21,     12,      0,      0,  28672,    128, }, /* 845 */
+  {    43,     21,     12,      0,      0,  28672,     74, }, /* 846 */
+  {    43,     15,     12,      0,      0,  28672,     74, }, /* 847 */
+  {    21,      5,     12,      0,  -7264,  18432,     78, }, /* 848 */
+  {    45,      7,     12,      0,      0,  18432,     84, }, /* 849 */
+  {    45,      6,     12,      0,      0,  18432,    148, }, /* 850 */
+  {    45,     21,     12,      0,      0,  18432,     74, }, /* 851 */
+  {    45,     12,      3,      0,      0,  26624,    288, }, /* 852 */
+  {     2,     12,      3,      0,      0,  26624,    106, }, /* 853 */
+  {   100,     20,     12,      0,      0,  28672,    228, }, /* 854 */
+  {   100,     19,     12,      0,      0,  28672,    228, }, /* 855 */
+  {   100,     17,     12,      0,      0,  29020,    212, }, /* 856 */
+  {   100,      6,     12,      0,      0,  28672,    290, }, /* 857 */
+  {   100,     21,     12,      0,      0,  29024,     54, }, /* 858 */
+  {   100,     21,     12,      0,      0,  29028,     54, }, /* 859 */
+  {   100,     21,     12,      0,      0,  29032,    224, }, /* 860 */
+  {   100,     21,     12,      0,      0,  29036,    292, }, /* 861 */
+  {   100,     21,     12,      0,      0,  28812,     54, }, /* 862 */
+  {   100,     21,     12,      0,      0,  28672,    292, }, /* 863 */
+  {    30,     26,     12,      0,      0,  28672,    294, }, /* 864 */
+  {   100,     26,     12,      0,      0,  29040,    296, }, /* 865 */
+  {   100,     26,     12,      0,      0,  29040,    298, }, /* 866 */
+  {   100,     26,     12,      0,      0,  29040,    300, }, /* 867 */
+  {   100,     21,     12,      0,      0,  29044,    292, }, /* 868 */
+  {   100,     21,     12,      0,      0,  29048,    224, }, /* 869 */
+  {   100,     21,     12,      0,      0,  29052,     54, }, /* 870 */
+  {    30,      6,     12,      0,      0,  18432,    138, }, /* 871 */
+  {   100,      7,     12,      0,      0,  18816,    302, }, /* 872 */
+  {    30,     14,     12,      0,      0,  18432,    302, }, /* 873 */
+  {   100,     22,     12,      0,      0,  29060,    228, }, /* 874 */
+  {   100,     18,     12,      0,      0,  29060,    228, }, /* 875 */
+  {   100,     22,     12,      0,      0,  29064,    228, }, /* 876 */
+  {   100,     18,     12,      0,      0,  29064,    228, }, /* 877 */
+  {   100,     22,     12,      0,      0,  29068,     62, }, /* 878 */
+  {   100,     18,     12,      0,      0,  29068,     62, }, /* 879 */
+  {   100,     22,     12,      0,      0,  29068,    228, }, /* 880 */
+  {   100,     18,     12,      0,      0,  29068,    228, }, /* 881 */
+  {   100,     26,     12,      0,      0,  29052,     54, }, /* 882 */
+  {   100,     17,     12,      0,      0,  29052,    212, }, /* 883 */
+  {   100,     22,     12,      0,      0,  29052,    216, }, /* 884 */
+  {   100,     18,     12,      0,      0,  29052,    216, }, /* 885 */
+  {   107,     12,      3,      0,      0,  27024,     98, }, /* 886 */
+  {    22,     10,      3,      0,      0,  18432,    304, }, /* 887 */
+  {   100,     17,     14,      0,      0,  29052,    306, }, /* 888 */
+  {   100,      6,     12,      0,      0,  18836,    138, }, /* 889 */
+  {   100,     26,     12,      0,      0,  29052,     74, }, /* 890 */
+  {    30,      6,     12,      0,      0,  18432,    148, }, /* 891 */
+  {   100,      7,     12,      0,      0,  18840,     84, }, /* 892 */
+  {   100,     21,     14,      0,      0,  29080,    252, }, /* 893 */
+  {   100,     26,     12,      0,      0,  29056,     74, }, /* 894 */
+  {    27,      7,     12,      0,      0,  18432,     84, }, /* 895 */
+  {   107,     12,      3,      0,      0,  27028,     98, }, /* 896 */
+  {   100,     24,     12,      0,      0,  29076,    308, }, /* 897 */
+  {    27,      6,     12,      0,      0,  18432,    138, }, /* 898 */
+  {   100,     17,     12,      0,      0,  29076,    130, }, /* 899 */
+  {    28,      7,     12,      0,      0,  18432,     84, }, /* 900 */
+  {   100,     21,     12,      0,      0,  29068,    144, }, /* 901 */
+  {   100,      6,     12,      0,      0,  18836,     96, }, /* 902 */
+  {    28,      6,     12,      0,      0,  18432,    138, }, /* 903 */
+  {    29,      7,     12,      0,      0,  18432,     84, }, /* 904 */
+  {    22,      7,     12,      0,      0,  18432,     84, }, /* 905 */
+  {    22,      7,     12,      0,      0,  18432,    184, }, /* 906 */
+  {   100,     26,     12,      0,      0,  18816,     74, }, /* 907 */
+  {   100,     15,     12,      0,      0,  18816,     74, }, /* 908 */
+  {    22,     26,     12,      0,      0,  18432,     74, }, /* 909 */
+  {    22,     26,     12,      0,      0,  28672,     74, }, /* 910 */
+  {   100,     15,     12,      0,      0,  18432,     74, }, /* 911 */
+  {   100,     26,     14,      0,      0,  18816,    252, }, /* 912 */
+  {    28,     26,     12,      0,      0,  18432,     74, }, /* 913 */
+  {    30,      7,     12,      0,      0,  18432,    310, }, /* 914 */
+  {    31,      7,     12,      0,      0,  18432,     84, }, /* 915 */
+  {    31,      6,     12,      0,      0,  18432,    138, }, /* 916 */
+  {    31,     26,     12,      0,      0,  28672,     74, }, /* 917 */
+  {    55,      7,     12,      0,      0,  18432,     84, }, /* 918 */
+  {    55,      6,     12,      0,      0,  18432,    148, }, /* 919 */
+  {    55,     21,     12,      0,      0,  18432,    110, }, /* 920 */
+  {    55,     21,     12,      0,      0,  18432,    128, }, /* 921 */
+  {   120,      7,     12,      0,      0,  18432,     84, }, /* 922 */
+  {   120,      6,     12,      0,      0,  18432,    138, }, /* 923 */
+  {   120,     21,     12,      0,      0,  28672,    110, }, /* 924 */
+  {   120,     21,     12,      0,      0,  28672,    128, }, /* 925 */
+  {   120,     13,     12,      0,      0,  18432,    144, }, /* 926 */
+  {     2,      9,     12,    108,      1,  18432,     76, }, /* 927 */
+  {     2,      5,     12,    108, -35267,  18432,     78, }, /* 928 */
+  {     2,      7,     12,      0,      0,  18432,     84, }, /* 929 */
+  {     2,     21,     12,      0,      0,  28672,     74, }, /* 930 */
+  {     2,     12,      3,      0,      0,  26624,     98, }, /* 931 */
+  {     2,      6,     12,      0,      0,  28672,     94, }, /* 932 */
+  {     2,      6,     12,      0,      0,  18432,     90, }, /* 933 */
+  {   127,      7,     12,      0,      0,  18432,     84, }, /* 934 */
+  {   127,     14,     12,      0,      0,  18432,     84, }, /* 935 */
+  {   127,     12,      3,      0,      0,  26624,     98, }, /* 936 */
+  {   127,     21,     12,      0,      0,  18432,     74, }, /* 937 */
+  {   127,     21,     12,      0,      0,  18432,    128, }, /* 938 */
+  {   127,     21,     12,      0,      0,  18432,    110, }, /* 939 */
+  {   100,     24,     12,      0,      0,  29084,     56, }, /* 940 */
+  {     0,      9,     12,      0, -35332,  18432,     76, }, /* 941 */
+  {   100,     24,     12,      0,      0,  18432,     56, }, /* 942 */
+  {     0,      9,     12,      0, -42280,  18432,     76, }, /* 943 */
+  {     0,      5,     12,      0,     48,  18432,     78, }, /* 944 */
+  {     0,      9,     12,      0, -42308,  18432,     76, }, /* 945 */
+  {     0,      9,     12,      0, -42319,  18432,     76, }, /* 946 */
+  {     0,      9,     12,      0, -42315,  18432,     76, }, /* 947 */
+  {     0,      9,     12,      0, -42305,  18432,     76, }, /* 948 */
+  {     0,      9,     12,      0, -42258,  18432,     76, }, /* 949 */
+  {     0,      9,     12,      0, -42282,  18432,     76, }, /* 950 */
+  {     0,      9,     12,      0, -42261,  18432,     76, }, /* 951 */
+  {     0,      9,     12,      0,    928,  18432,     76, }, /* 952 */
+  {     0,      9,     12,      0,    -48,  18432,     76, }, /* 953 */
+  {     0,      9,     12,      0, -42307,  18432,     76, }, /* 954 */
+  {     0,      9,     12,      0, -35384,  18432,     76, }, /* 955 */
+  {     0,      9,     12,      0, -42343,  18432,     76, }, /* 956 */
+  {     0,      9,     12,      0, -42561,  18432,     76, }, /* 957 */
+  {    46,      7,     12,      0,      0,  18432,     84, }, /* 958 */
+  {    46,     12,      3,      0,      0,  26624,    106, }, /* 959 */
+  {    46,     12,      3,      0,      0,  26624,    158, }, /* 960 */
+  {    46,     10,      5,      0,      0,  18432,    154, }, /* 961 */
+  {    46,     26,     12,      0,      0,  28672,     74, }, /* 962 */
+  {   100,     15,     12,      0,      0,  18848,     74, }, /* 963 */
+  {   100,     15,     12,      0,      0,  18852,     74, }, /* 964 */
+  {   100,     26,     12,      0,      0,  18856,     74, }, /* 965 */
+  {   100,     23,     12,      0,      0,  14764,     74, }, /* 966 */
+  {   100,     26,     12,      0,      0,  14760,     74, }, /* 967 */
+  {    47,      7,     12,      0,      0,  18432,     84, }, /* 968 */
+  {    47,     21,     12,      0,      0,  28672,     74, }, /* 969 */
+  {    47,     21,     12,      0,      0,  28672,    128, }, /* 970 */
+  {   121,     10,      5,      0,      0,  18432,    154, }, /* 971 */
+  {   121,      7,     12,      0,      0,  18432,     84, }, /* 972 */
+  {   121,     12,      3,      0,      0,  26624,    158, }, /* 973 */
+  {   121,     12,      3,      0,      0,  26624,    106, }, /* 974 */
+  {   121,     21,     12,      0,      0,  18432,    128, }, /* 975 */
+  {   121,     13,     12,      0,      0,  18432,    144, }, /* 976 */
+  {     8,     12,      3,      0,      0,  27056,     98, }, /* 977 */
+  {     8,      7,     12,      0,      0,  18868,     84, }, /* 978 */
+  {    49,     13,     12,      0,      0,  18432,    144, }, /* 979 */
+  {    49,      7,     12,      0,      0,  18432,     84, }, /* 980 */
+  {    49,     12,      3,      0,      0,  26624,    106, }, /* 981 */
+  {    49,     12,      3,      0,      0,  26624,     98, }, /* 982 */
+  {   100,     21,     12,      0,      0,  18872,    202, }, /* 983 */
+  {    49,     21,     12,      0,      0,  18432,    128, }, /* 984 */
+  {   122,      7,     12,      0,      0,  18432,     84, }, /* 985 */
+  {   122,     12,      3,      0,      0,  26624,    106, }, /* 986 */
+  {   122,     10,      5,      0,      0,  18432,    154, }, /* 987 */
+  {   122,     10,      3,      0,      0,  18432,    188, }, /* 988 */
+  {   122,     21,     12,      0,      0,  18432,     74, }, /* 989 */
+  {    56,     12,      3,      0,      0,  26624,    106, }, /* 990 */
+  {    56,     10,      5,      0,      0,  18432,    154, }, /* 991 */
+  {    56,      7,     12,      0,      0,  18432,     84, }, /* 992 */
+  {    56,      7,     12,      0,      0,  18432,    156, }, /* 993 */
+  {    56,     12,      3,      0,      0,  26624,     98, }, /* 994 */
+  {    56,     10,      3,      0,      0,  18432,    188, }, /* 995 */
+  {    56,     21,     12,      0,      0,  18432,     74, }, /* 996 */
+  {    56,     21,     12,      0,      0,  18432,    110, }, /* 997 */
+  {    56,     21,     12,      0,      0,  18432,    128, }, /* 998 */
+  {   100,      6,     12,      0,      0,  18876,    138, }, /* 999 */
+  {    56,     13,     12,      0,      0,  18432,    144, }, /* 1000 */
+  {    20,      6,     12,      0,      0,  18432,    138, }, /* 1001 */
+  {   123,      7,     12,      0,      0,  18432,     84, }, /* 1002 */
+  {   123,     12,      3,      0,      0,  26624,    106, }, /* 1003 */
+  {   123,     10,      5,      0,      0,  18432,    154, }, /* 1004 */
+  {   123,     13,     12,      0,      0,  18432,    144, }, /* 1005 */
+  {   123,     21,     12,      0,      0,  18432,     74, }, /* 1006 */
+  {   123,     21,     12,      0,      0,  18432,    128, }, /* 1007 */
+  {    20,      7,     12,      0,      0,  18432,     84, }, /* 1008 */
+  {   125,      7,     12,      0,      0,  18432,     84, }, /* 1009 */
+  {   125,     12,      3,      0,      0,  26624,    106, }, /* 1010 */
+  {   125,      7,     12,      0,      0,  18432,    170, }, /* 1011 */
+  {   125,     12,      3,      0,      0,  26624,     98, }, /* 1012 */
+  {   125,      7,     12,      0,      0,  18432,    312, }, /* 1013 */
+  {   125,      6,     12,      0,      0,  18432,    138, }, /* 1014 */
+  {   125,     21,     12,      0,      0,  18432,     74, }, /* 1015 */
+  {   125,     21,     12,      0,      0,  18432,    110, }, /* 1016 */
+  {   128,      7,     12,      0,      0,  18432,    156, }, /* 1017 */
+  {   128,     10,      5,      0,      0,  18432,    154, }, /* 1018 */
+  {   128,     12,      3,      0,      0,  26624,    106, }, /* 1019 */
+  {   128,     21,     12,      0,      0,  18432,    128, }, /* 1020 */
+  {   128,      7,     12,      0,      0,  18432,     84, }, /* 1021 */
+  {   128,      6,     12,      0,      0,  18432,    138, }, /* 1022 */
+  {   128,     12,      3,      0,      0,  26624,    158, }, /* 1023 */
+  {     0,      5,     12,      0,   -928,  18432,     78, }, /* 1024 */
+  {    24,      5,     12,      0, -38864,  18432,     70, }, /* 1025 */
+  {   128,     10,      5,      0,      0,  18432,    174, }, /* 1026 */
+  {   128,     13,     12,      0,      0,  18432,    144, }, /* 1027 */
+  {    22,      7,      9,      0,      0,  18432,     84, }, /* 1028 */
+  {    22,      7,     10,      0,      0,  18432,     84, }, /* 1029 */
+  {    99,      4,     12,      0,      0,  18432,      0, }, /* 1030 */
+  {    99,      3,     12,      0,      0,  18432,      0, }, /* 1031 */
+  {    30,      7,     12,      0,      0,  18432,    302, }, /* 1032 */
+  {     0,      5,     12,      0,      1,  18432,     70, }, /* 1033 */
+  {     0,      5,     12,      0,     -1,  18432,     70, }, /* 1034 */
+  {     4,     25,     12,      0,      0,  12288,    122, }, /* 1035 */
+  {     5,      7,     12,      0,      0,      0,    314, }, /* 1036 */
+  {   100,     18,     12,      0,      0,  29120,     54, }, /* 1037 */
+  {   100,     22,     12,      0,      0,  29120,     54, }, /* 1038 */
+  {    99,      2,     12,      0,      0,   6144,    316, }, /* 1039 */
+  {     5,      7,     12,      0,      0,    452,     84, }, /* 1040 */
+  {     5,     26,     12,      0,      0,  29124,     74, }, /* 1041 */
+  {   107,     12,      3,      0,      0,  26624,    194, }, /* 1042 */
+  {   107,     12,      3,      0,      0,  26624,    318, }, /* 1043 */
+  {   100,     21,     12,      0,      0,  28672,     74, }, /* 1044 */
+  {   100,     21,     12,      0,      0,  28672,    128, }, /* 1045 */
+  {   100,     21,     12,      0,      0,  28672,    126, }, /* 1046 */
+  {   100,     22,     12,      0,      0,  28672,     74, }, /* 1047 */
+  {   100,     18,     12,      0,      0,  28672,     74, }, /* 1048 */
+  {   100,     17,     12,      0,      0,  28672,    130, }, /* 1049 */
+  {   100,     22,     12,      0,      0,  28672,    320, }, /* 1050 */
+  {   100,     18,     12,      0,      0,  28672,    320, }, /* 1051 */
+  {   100,     21,     12,      0,      0,   8192,    110, }, /* 1052 */
+  {   100,     21,     12,      0,      0,   8192,    322, }, /* 1053 */
+  {   100,     21,     12,      0,      0,   8192,    324, }, /* 1054 */
+  {   100,     22,     12,      0,      0,  28672,    172, }, /* 1055 */
+  {   100,     18,     12,      0,      0,  28672,    172, }, /* 1056 */
+  {   100,     21,     12,      0,      0,  14336,     74, }, /* 1057 */
+  {   100,     21,     12,      0,      0,  28672,    122, }, /* 1058 */
+  {   100,     25,     12,      0,      0,  12288,    122, }, /* 1059 */
+  {   100,     17,     12,      0,      0,  12288,    326, }, /* 1060 */
+  {   100,     25,     12,      0,      0,  28672,    328, }, /* 1061 */
+  {   100,     21,     12,      0,      0,  28672,    320, }, /* 1062 */
+  {   100,     21,     12,      0,      0,  28672,    330, }, /* 1063 */
+  {   100,     17,     12,      0,      0,  12288,    130, }, /* 1064 */
+  {   100,     21,     12,      0,      0,   8192,     74, }, /* 1065 */
+  {   100,     13,     12,      0,      0,  10240,    332, }, /* 1066 */
+  {     0,      9,     12,      0,     32,  18432,    334, }, /* 1067 */
+  {   100,     24,     12,      0,      0,  28672,    336, }, /* 1068 */
+  {     0,      5,     12,      0,    -32,  18432,    338, }, /* 1069 */
+  {   100,     21,     12,      0,      0,  29068,    128, }, /* 1070 */
+  {   100,     22,     12,      0,      0,  29068,    340, }, /* 1071 */
+  {   100,     18,     12,      0,      0,  29068,    340, }, /* 1072 */
+  {   100,     21,     12,      0,      0,  29068,    110, }, /* 1073 */
+  {   100,      6,      3,      0,      0,  18836,    342, }, /* 1074 */
+  {   100,      1,      2,      0,      0,  28672,    344, }, /* 1075 */
+  {    39,      7,     12,      0,      0,  18432,     84, }, /* 1076 */
+  {   100,     21,     12,      0,      0,  18888,     74, }, /* 1077 */
+  {   100,     21,     12,      0,      0,  29128,     74, }, /* 1078 */
+  {   100,     21,     12,      0,      0,  18892,     74, }, /* 1079 */
+  {   100,     15,     12,      0,      0,  18896,     74, }, /* 1080 */
+  {   100,     26,     12,      0,      0,  18892,     74, }, /* 1081 */
+  {     1,     14,     12,      0,      0,  28672,     84, }, /* 1082 */
+  {     1,     15,     12,      0,      0,  28672,     74, }, /* 1083 */
+  {     1,     26,     12,      0,      0,  28672,     74, }, /* 1084 */
+  {     1,     26,     12,      0,      0,  18432,     74, }, /* 1085 */
+  {    50,      7,     12,      0,      0,  18432,     84, }, /* 1086 */
+  {    51,      7,     12,      0,      0,  18432,     84, }, /* 1087 */
+  {   107,     12,      3,      0,      0,  27092,     98, }, /* 1088 */
+  {   100,     15,     12,      0,      0,  10708,     74, }, /* 1089 */
+  {   105,      7,     12,      0,      0,  18432,     84, }, /* 1090 */
+  {   105,     15,     12,      0,      0,  18432,     74, }, /* 1091 */
+  {    32,      7,     12,      0,      0,  18432,     84, }, /* 1092 */
+  {    32,     14,     12,      0,      0,  18432,     84, }, /* 1093 */
+  {    73,      7,     12,      0,      0,  18432,     84, }, /* 1094 */
+  {    73,     12,      3,      0,      0,  26624,    106, }, /* 1095 */
+  {   108,      7,     12,      0,      0,  18432,     84, }, /* 1096 */
+  {   108,     21,     12,      0,      0,  18432,    110, }, /* 1097 */
+  {   112,      7,     12,      0,      0,  18432,     84, }, /* 1098 */
+  {   112,     21,     12,      0,      0,  18432,    110, }, /* 1099 */
+  {   112,     14,     12,      0,      0,  18432,     84, }, /* 1100 */
+  {   106,      9,     12,      0,     40,  18432,     76, }, /* 1101 */
+  {   106,      5,     12,      0,    -40,  18432,     78, }, /* 1102 */
+  {    40,      7,     12,      0,      0,  18432,     84, }, /* 1103 */
+  {   109,      7,     12,      0,      0,  18432,     84, }, /* 1104 */
+  {   109,     13,     12,      0,      0,  18432,    144, }, /* 1105 */
+  {    81,      9,     12,      0,     40,  18432,     76, }, /* 1106 */
+  {    81,      5,     12,      0,    -40,  18432,     78, }, /* 1107 */
+  {    66,      7,     12,      0,      0,  18432,     84, }, /* 1108 */
+  {    64,      7,     12,      0,      0,  18432,     84, }, /* 1109 */
+  {    64,     21,     12,      0,      0,  18432,     74, }, /* 1110 */
+  {   167,      9,     12,      0,     39,  18432,     76, }, /* 1111 */
+  {   167,      5,     12,      0,    -39,  18432,     78, }, /* 1112 */
+  {    97,      7,     12,      0,      0,  18432,     84, }, /* 1113 */
+  {    69,      7,     12,      0,      0,  18432,     84, }, /* 1114 */
+  {     0,      6,     12,      0,      0,  18432,     96, }, /* 1115 */
+  {    41,      7,     12,      0,      0,  34816,     84, }, /* 1116 */
+  {   129,      7,     12,      0,      0,  34816,     84, }, /* 1117 */
+  {   129,     21,     12,      0,      0,  34816,    110, }, /* 1118 */
+  {   129,     15,     12,      0,      0,  34816,     74, }, /* 1119 */
+  {   144,      7,     12,      0,      0,  34816,     84, }, /* 1120 */
+  {   144,     26,     12,      0,      0,  34816,     74, }, /* 1121 */
+  {   144,     15,     12,      0,      0,  34816,     74, }, /* 1122 */
+  {   143,      7,     12,      0,      0,  34816,     84, }, /* 1123 */
+  {   143,     15,     12,      0,      0,  34816,     74, }, /* 1124 */
+  {   150,      7,     12,      0,      0,  34816,     84, }, /* 1125 */
+  {   150,     15,     12,      0,      0,  34816,     74, }, /* 1126 */
+  {   116,      7,     12,      0,      0,  34816,     84, }, /* 1127 */
+  {   116,     15,     12,      0,      0,  34816,     74, }, /* 1128 */
+  {   116,     21,     12,      0,      0,  28672,    110, }, /* 1129 */
+  {    52,      7,     12,      0,      0,  34816,     84, }, /* 1130 */
+  {    52,     21,     12,      0,      0,  34816,     74, }, /* 1131 */
+  {   171,      7,     12,      0,      0,  34816,     84, }, /* 1132 */
+  {    61,      7,     12,      0,      0,  34816,     84, }, /* 1133 */
+  {   135,      7,     12,      0,      0,  34816,     84, }, /* 1134 */
+  {   135,     15,     12,      0,      0,  34816,     74, }, /* 1135 */
+  {   113,      7,     12,      0,      0,  34816,    156, }, /* 1136 */
+  {   113,     12,      3,      0,      0,  26624,    106, }, /* 1137 */
+  {   113,     12,      3,      0,      0,  26624,     98, }, /* 1138 */
+  {   113,     12,      3,      0,      0,  26624,    158, }, /* 1139 */
+  {   113,     15,     12,      0,      0,  34816,     74, }, /* 1140 */
+  {   113,     21,     12,      0,      0,  34816,     74, }, /* 1141 */
+  {   113,     21,     12,      0,      0,  34816,    128, }, /* 1142 */
+  {   130,      7,     12,      0,      0,  34816,     84, }, /* 1143 */
+  {   130,     15,     12,      0,      0,  34816,     74, }, /* 1144 */
+  {   130,     21,     12,      0,      0,  34816,     74, }, /* 1145 */
+  {   142,      7,     12,      0,      0,  34816,     84, }, /* 1146 */
+  {   142,     15,     12,      0,      0,  34816,     74, }, /* 1147 */
+  {    71,      7,     12,      0,      0,  34816,     84, }, /* 1148 */
+  {    71,     26,     12,      0,      0,  34816,     74, }, /* 1149 */
+  {    71,     12,      3,      0,      0,  26624,     98, }, /* 1150 */
+  {    71,     15,     12,      0,      0,  34816,     74, }, /* 1151 */
+  {    71,     21,     12,      0,      0,  34816,    110, }, /* 1152 */
+  {    71,     21,     12,      0,      0,  35288,    110, }, /* 1153 */
+  {    71,     21,     12,      0,      0,  34816,     74, }, /* 1154 */
+  {    53,      7,     12,      0,      0,  34816,     84, }, /* 1155 */
+  {    53,     21,     12,      0,      0,  28672,     74, }, /* 1156 */
+  {    53,     21,     12,      0,      0,  28672,    110, }, /* 1157 */
+  {   131,      7,     12,      0,      0,  34816,     84, }, /* 1158 */
+  {   131,     15,     12,      0,      0,  34816,     74, }, /* 1159 */
+  {   132,      7,     12,      0,      0,  34816,     84, }, /* 1160 */
+  {   132,     15,     12,      0,      0,  34816,     74, }, /* 1161 */
+  {    74,      7,     12,      0,      0,  34816,     84, }, /* 1162 */
+  {    74,     21,     12,      0,      0,  34816,    110, }, /* 1163 */
+  {    74,     15,     12,      0,      0,  34816,     74, }, /* 1164 */
+  {    57,      7,     12,      0,      0,  34816,     84, }, /* 1165 */
+  {    78,      9,     12,      0,     64,  34816,     76, }, /* 1166 */
+  {    78,      5,     12,      0,    -64,  34816,     78, }, /* 1167 */
+  {    78,     15,     12,      0,      0,  34816,     74, }, /* 1168 */
+  {    86,      7,     12,      0,      0,      0,     84, }, /* 1169 */
+  {    86,      7,     12,      0,      0,      0,    312, }, /* 1170 */
+  {    86,     12,      3,      0,      0,  26624,    132, }, /* 1171 */
+  {    86,     13,     12,      0,      0,   2048,    144, }, /* 1172 */
+  {    93,     13,     12,      0,      0,   2048,    144, }, /* 1173 */
+  {    93,      7,     12,      0,      0,  34816,     84, }, /* 1174 */
+  {    93,      6,     12,      0,      0,  34816,     96, }, /* 1175 */
+  {    93,      9,     12,      0,     32,  34816,     76, }, /* 1176 */
+  {    93,     12,      3,      0,      0,  26624,    132, }, /* 1177 */
+  {    93,     12,      3,      0,      0,  26624,    164, }, /* 1178 */
+  {    93,     12,      3,      0,      0,  26624,     98, }, /* 1179 */
+  {    93,     17,     12,      0,      0,  28672,    130, }, /* 1180 */
+  {    93,      6,     12,      0,      0,  34816,    138, }, /* 1181 */
+  {    93,      5,     12,      0,    -32,  34816,     78, }, /* 1182 */
+  {    93,     25,     12,      0,      0,  34816,    122, }, /* 1183 */
+  {     5,     15,     12,      0,      0,   2048,     74, }, /* 1184 */
+  {    89,      7,     12,      0,      0,  34816,     84, }, /* 1185 */
+  {    89,     12,      3,      0,      0,  26624,    106, }, /* 1186 */
+  {    89,     17,     12,      0,      0,  34816,    130, }, /* 1187 */
+  {     5,      6,     12,      0,      0,      0,    148, }, /* 1188 */
+  {     5,     21,     12,      0,      0,  28672,     74, }, /* 1189 */
+  {   159,      7,     12,      0,      0,  34816,     84, }, /* 1190 */
+  {   159,     15,     12,      0,      0,  34816,     74, }, /* 1191 */
+  {    87,      7,     12,      0,      0,      0,     84, }, /* 1192 */
+  {    87,     12,      3,      0,      0,  26624,     98, }, /* 1193 */
+  {    87,     15,     12,      0,      0,      0,     74, }, /* 1194 */
+  {    87,     21,     12,      0,      0,      0,    128, }, /* 1195 */
+  {    91,      7,     12,      0,      0,  34816,     84, }, /* 1196 */
+  {    91,     12,      3,      0,      0,  26624,     98, }, /* 1197 */
+  {    91,     21,     12,      0,      0,  34816,    128, }, /* 1198 */
+  {   163,      7,     12,      0,      0,  34816,     84, }, /* 1199 */
+  {   163,     15,     12,      0,      0,  34816,     74, }, /* 1200 */
+  {   160,      7,     12,      0,      0,  34816,     84, }, /* 1201 */
+  {   134,     10,      5,      0,      0,  18432,    154, }, /* 1202 */
+  {   134,     12,      3,      0,      0,  26624,    106, }, /* 1203 */
+  {   134,      7,     12,      0,      0,  18432,     84, }, /* 1204 */
+  {   134,     12,      3,      0,      0,  26624,    158, }, /* 1205 */
+  {   134,     21,     12,      0,      0,  18432,    128, }, /* 1206 */
+  {   134,     21,     12,      0,      0,  18432,    110, }, /* 1207 */
+  {   134,     15,     12,      0,      0,  28672,     74, }, /* 1208 */
+  {   134,     13,     12,      0,      0,  18432,    144, }, /* 1209 */
+  {   134,     12,      3,      0,      0,  26624,    288, }, /* 1210 */
+  {    58,     12,      3,      0,      0,  26624,    106, }, /* 1211 */
+  {    58,     10,      5,      0,      0,  18432,    154, }, /* 1212 */
+  {    58,      7,     12,      0,      0,  18432,     84, }, /* 1213 */
+  {    58,     12,      3,      0,      0,  26624,    158, }, /* 1214 */
+  {    58,     12,      3,      0,      0,  26624,     98, }, /* 1215 */
+  {    58,     21,     12,      0,      0,  18432,     74, }, /* 1216 */
+  {    58,      1,      4,      0,      0,  18432,    134, }, /* 1217 */
+  {    58,     21,     12,      0,      0,  18432,    128, }, /* 1218 */
+  {   137,      7,     12,      0,      0,  18432,     84, }, /* 1219 */
+  {   137,     13,     12,      0,      0,  18432,    144, }, /* 1220 */
+  {    60,     12,      3,      0,      0,  26624,    106, }, /* 1221 */
+  {    60,      7,     12,      0,      0,  18432,    156, }, /* 1222 */
+  {    60,     10,      5,      0,      0,  18432,    154, }, /* 1223 */
+  {    60,     12,      3,      0,      0,  26624,    158, }, /* 1224 */
+  {    60,     13,     12,      0,      0,  18432,    144, }, /* 1225 */
+  {    60,     21,     12,      0,      0,  18432,     74, }, /* 1226 */
+  {    60,     21,     12,      0,      0,  18432,    128, }, /* 1227 */
+  {    70,      7,     12,      0,      0,  18432,     84, }, /* 1228 */
+  {    70,     12,      3,      0,      0,  26624,     98, }, /* 1229 */
+  {    70,     21,     12,      0,      0,  18432,     74, }, /* 1230 */
+  {    62,     12,      3,      0,      0,  26624,    106, }, /* 1231 */
+  {    62,     10,      5,      0,      0,  18432,    154, }, /* 1232 */
+  {    62,      7,     12,      0,      0,  18432,     84, }, /* 1233 */
+  {    62,     10,      3,      0,      0,  18432,    188, }, /* 1234 */
+  {    62,      7,      4,      0,      0,  18432,     84, }, /* 1235 */
+  {    62,     21,     12,      0,      0,  18432,    128, }, /* 1236 */
+  {    62,     21,     12,      0,      0,  18432,     74, }, /* 1237 */
+  {    62,     12,      3,      0,      0,  26624,    104, }, /* 1238 */
+  {    62,     12,      3,      0,      0,  26624,     98, }, /* 1239 */
+  {    62,     13,     12,      0,      0,  18432,    144, }, /* 1240 */
+  {    17,     15,     12,      0,      0,  18432,     74, }, /* 1241 */
+  {    68,      7,     12,      0,      0,  18432,     84, }, /* 1242 */
+  {    68,     10,      5,      0,      0,  18432,    154, }, /* 1243 */
+  {    68,     12,      3,      0,      0,  26624,    106, }, /* 1244 */
+  {    68,     10,      3,      0,      0,  18432,    188, }, /* 1245 */
+  {    68,     12,      3,      0,      0,  26624,     98, }, /* 1246 */
+  {    68,     12,      3,      0,      0,  26624,    162, }, /* 1247 */
+  {    68,     21,     12,      0,      0,  18432,    128, }, /* 1248 */
+  {    68,     21,     12,      0,      0,  18432,    110, }, /* 1249 */
+  {    68,     21,     12,      0,      0,  18432,     74, }, /* 1250 */
+  {    77,      7,     12,      0,      0,  18432,     84, }, /* 1251 */
+  {    77,     21,     12,      0,      0,  18432,    128, }, /* 1252 */
+  {    75,      7,     12,      0,      0,  18432,     84, }, /* 1253 */
+  {    75,     12,      3,      0,      0,  26624,    106, }, /* 1254 */
+  {    75,     10,      5,      0,      0,  18432,    154, }, /* 1255 */
+  {    75,     12,      3,      0,      0,  26624,     98, }, /* 1256 */
+  {    75,     12,      3,      0,      0,  26624,    158, }, /* 1257 */
+  {    75,     13,     12,      0,      0,  18432,    144, }, /* 1258 */
+  {    67,     12,      3,      0,      0,  26624,    106, }, /* 1259 */
+  {    67,     12,      3,      0,      0,  26836,    106, }, /* 1260 */
+  {    67,     10,      5,      0,      0,  18432,    154, }, /* 1261 */
+  {    67,     10,      5,      0,      0,  18644,    154, }, /* 1262 */
+  {    67,      7,     12,      0,      0,  18432,     84, }, /* 1263 */
+  {   107,     12,      3,      0,      0,  26836,     98, }, /* 1264 */
+  {    67,     12,      3,      0,      0,  26836,     98, }, /* 1265 */
+  {    67,     10,      3,      0,      0,  18432,    160, }, /* 1266 */
+  {    67,     10,      3,      0,      0,  18432,    188, }, /* 1267 */
+  {    67,      7,     12,      0,      0,  18432,    346, }, /* 1268 */
+  {    67,     12,      3,      0,      0,  26624,     98, }, /* 1269 */
+  {    98,      7,     12,      0,      0,  18432,    156, }, /* 1270 */
+  {    98,      7,     12,      0,      0,  18432,     84, }, /* 1271 */
+  {    98,     10,      3,      0,      0,  18432,    160, }, /* 1272 */
+  {    98,     10,      5,      0,      0,  18432,    154, }, /* 1273 */
+  {    98,     12,      3,      0,      0,  26624,    106, }, /* 1274 */
+  {    98,     12,      3,      0,      0,  26624,    158, }, /* 1275 */
+  {    98,     10,      3,      0,      0,  18432,    188, }, /* 1276 */
+  {    98,      7,      4,      0,      0,  18432,     84, }, /* 1277 */
+  {    98,     12,      3,      0,      0,  26624,    164, }, /* 1278 */
+  {    98,      7,     12,      0,      0,  18432,    348, }, /* 1279 */
+  {    98,     21,     12,      0,      0,  18432,    128, }, /* 1280 */
+  {    98,     21,     12,      0,      0,  18432,     74, }, /* 1281 */
+  {    98,     12,      3,      0,      0,  26624,     98, }, /* 1282 */
+  {    80,      7,     12,      0,      0,  18432,     84, }, /* 1283 */
+  {    80,     10,      5,      0,      0,  18432,    154, }, /* 1284 */
+  {    80,     12,      3,      0,      0,  26624,    106, }, /* 1285 */
+  {    80,     12,      3,      0,      0,  26624,    158, }, /* 1286 */
+  {    80,     12,      3,      0,      0,  26624,     98, }, /* 1287 */
+  {    80,     21,     12,      0,      0,  18432,    128, }, /* 1288 */
+  {    80,     21,     12,      0,      0,  18432,    110, }, /* 1289 */
+  {    80,     21,     12,      0,      0,  18432,     74, }, /* 1290 */
+  {    80,     13,     12,      0,      0,  18432,    144, }, /* 1291 */
+  {    80,     12,      3,      0,      0,  26624,    104, }, /* 1292 */
+  {    76,      7,     12,      0,      0,  18432,     84, }, /* 1293 */
+  {    76,     10,      3,      0,      0,  18432,    160, }, /* 1294 */
+  {    76,     10,      5,      0,      0,  18432,    154, }, /* 1295 */
+  {    76,     12,      3,      0,      0,  26624,    106, }, /* 1296 */
+  {    76,     12,      3,      0,      0,  26624,    158, }, /* 1297 */
+  {    76,     12,      3,      0,      0,  26624,     98, }, /* 1298 */
+  {    76,     21,     12,      0,      0,  18432,     74, }, /* 1299 */
+  {    76,     13,     12,      0,      0,  18432,    144, }, /* 1300 */
+  {   146,      7,     12,      0,      0,  18432,     84, }, /* 1301 */
+  {   146,     10,      3,      0,      0,  18432,    160, }, /* 1302 */
+  {   146,     10,      5,      0,      0,  18432,    154, }, /* 1303 */
+  {   146,     12,      3,      0,      0,  26624,    106, }, /* 1304 */
+  {   146,     12,      3,      0,      0,  26624,    158, }, /* 1305 */
+  {   146,     12,      3,      0,      0,  26624,     98, }, /* 1306 */
+  {   146,     21,     12,      0,      0,  18432,     74, }, /* 1307 */
+  {   146,     21,     12,      0,      0,  18432,    128, }, /* 1308 */
+  {   146,     21,     12,      0,      0,  18432,    110, }, /* 1309 */
+  {   146,     21,     12,      0,      0,  18432,    192, }, /* 1310 */
+  {    72,      7,     12,      0,      0,  18432,     84, }, /* 1311 */
+  {    72,     10,      5,      0,      0,  18432,    154, }, /* 1312 */
+  {    72,     12,      3,      0,      0,  26624,    106, }, /* 1313 */
+  {    72,     12,      3,      0,      0,  26624,    158, }, /* 1314 */
+  {    72,     21,     12,      0,      0,  18432,    128, }, /* 1315 */
+  {    72,     21,     12,      0,      0,  18432,     74, }, /* 1316 */
+  {    72,     13,     12,      0,      0,  18432,    144, }, /* 1317 */
+  {    63,      7,     12,      0,      0,  18432,     84, }, /* 1318 */
+  {    63,     12,      3,      0,      0,  26624,    106, }, /* 1319 */
+  {    63,     10,      5,      0,      0,  18432,    154, }, /* 1320 */
+  {    63,     10,      3,      0,      0,  18432,    188, }, /* 1321 */
+  {    63,     12,      3,      0,      0,  26624,     98, }, /* 1322 */
+  {    63,     21,     12,      0,      0,  18432,     74, }, /* 1323 */
+  {    63,     13,     12,      0,      0,  18432,    144, }, /* 1324 */
+  {   148,      7,     12,      0,      0,  18432,     84, }, /* 1325 */
+  {   148,     12,      3,      0,      0,  26624,    106, }, /* 1326 */
+  {   148,     10,      5,      0,      0,  18432,    154, }, /* 1327 */
+  {   148,     10,     12,      0,      0,  18432,    154, }, /* 1328 */
+  {   148,     12,      3,      0,      0,  26624,    158, }, /* 1329 */
+  {   148,     13,     12,      0,      0,  18432,    144, }, /* 1330 */
+  {   148,     15,     12,      0,      0,  18432,     74, }, /* 1331 */
+  {   148,     21,     12,      0,      0,  18432,    128, }, /* 1332 */
+  {   148,     26,     12,      0,      0,  18432,     74, }, /* 1333 */
+  {    84,      7,     12,      0,      0,  18432,     84, }, /* 1334 */
+  {    84,     10,      5,      0,      0,  18432,    154, }, /* 1335 */
+  {    84,     12,      3,      0,      0,  26624,    106, }, /* 1336 */
+  {    84,     12,      3,      0,      0,  26624,    158, }, /* 1337 */
+  {    84,     12,      3,      0,      0,  26624,     98, }, /* 1338 */
+  {    84,     21,     12,      0,      0,  18432,     74, }, /* 1339 */
+  {   147,      9,     12,      0,     32,  18432,     76, }, /* 1340 */
+  {   147,      5,     12,      0,    -32,  18432,     78, }, /* 1341 */
+  {   147,     13,     12,      0,      0,  18432,    144, }, /* 1342 */
+  {   147,     15,     12,      0,      0,  18432,     74, }, /* 1343 */
+  {   147,      7,     12,      0,      0,  18432,     84, }, /* 1344 */
+  {   164,      7,     12,      0,      0,  18432,    156, }, /* 1345 */
+  {   164,     10,      3,      0,      0,  18432,    160, }, /* 1346 */
+  {   164,     10,      5,      0,      0,  18432,    154, }, /* 1347 */
+  {   164,     12,      3,      0,      0,  26624,    106, }, /* 1348 */
+  {   164,     10,      3,      0,      0,  18432,    188, }, /* 1349 */
+  {   164,     12,      3,      0,      0,  26624,    158, }, /* 1350 */
+  {   164,      7,      4,      0,      0,  18432,     84, }, /* 1351 */
+  {   164,     12,      3,      0,      0,  26624,     98, }, /* 1352 */
+  {   164,     21,     12,      0,      0,  18432,    128, }, /* 1353 */
+  {   164,     21,     12,      0,      0,  18432,     74, }, /* 1354 */
+  {   164,     13,     12,      0,      0,  18432,    144, }, /* 1355 */
+  {    88,      7,     12,      0,      0,  18432,     84, }, /* 1356 */
+  {    88,     10,      5,      0,      0,  18432,    154, }, /* 1357 */
+  {    88,     12,      3,      0,      0,  26624,    106, }, /* 1358 */
+  {    88,     12,      3,      0,      0,  26624,    158, }, /* 1359 */
+  {    88,     21,     12,      0,      0,  18432,     74, }, /* 1360 */
+  {   156,      7,     12,      0,      0,  18432,    156, }, /* 1361 */
+  {   156,     12,      3,      0,      0,  26624,    106, }, /* 1362 */
+  {   156,     12,      3,      0,      0,  18432,    106, }, /* 1363 */
+  {   156,     12,      3,      0,      0,  26624,    104, }, /* 1364 */
+  {   156,     12,      3,      0,      0,  26624,    158, }, /* 1365 */
+  {   156,     10,      5,      0,      0,  18432,    154, }, /* 1366 */
+  {   156,      7,     12,      0,      0,  18432,     84, }, /* 1367 */
+  {   156,     21,     12,      0,      0,  18432,     74, }, /* 1368 */
+  {   156,     21,     12,      0,      0,  18432,    128, }, /* 1369 */
+  {   155,      7,     12,      0,      0,  18432,    156, }, /* 1370 */
+  {   155,     12,      3,      0,      0,  26624,    106, }, /* 1371 */
+  {   155,     10,      5,      0,      0,  18432,    154, }, /* 1372 */
+  {   155,      7,      4,      0,      0,  18432,     84, }, /* 1373 */
+  {   155,     12,      3,      0,      0,  26624,    350, }, /* 1374 */
+  {   155,     12,      3,      0,      0,  26624,    158, }, /* 1375 */
+  {   155,     21,     12,      0,      0,  18432,     74, }, /* 1376 */
+  {   155,     21,     12,      0,      0,  18432,    128, }, /* 1377 */
+  {   155,      7,     12,      0,      0,  18432,     84, }, /* 1378 */
+  {   155,     21,     12,      0,      0,  18432,    110, }, /* 1379 */
+  {   145,      7,     12,      0,      0,  18432,     84, }, /* 1380 */
+  {    96,      7,     12,      0,      0,  18432,     84, }, /* 1381 */
+  {    96,     21,     12,      0,      0,  18432,     74, }, /* 1382 */
+  {    96,     13,     12,      0,      0,  18432,    144, }, /* 1383 */
+  {   152,      7,     12,      0,      0,  18432,     84, }, /* 1384 */
   {   152,     10,      5,      0,      0,  18432,    154, }, /* 1385 */
-  {    82,      7,     12,      0,      0,  18432,     84, }, /* 1386 */
-  {    82,     12,      3,      0,      0,  26624,    106, }, /* 1387 */
-  {    82,     12,      3,      0,      0,  26624,     98, }, /* 1388 */
-  {    82,     12,      3,      0,      0,  26624,    158, }, /* 1389 */
-  {    82,      7,      4,      0,      0,  18432,     84, }, /* 1390 */
-  {    82,     13,     12,      0,      0,  18432,    144, }, /* 1391 */
-  {    84,      7,     12,      0,      0,  18432,     84, }, /* 1392 */
-  {    84,     10,      5,      0,      0,  18432,    154, }, /* 1393 */
-  {    84,     12,      3,      0,      0,  26624,    106, }, /* 1394 */
-  {    84,     12,      3,      0,      0,  26624,    158, }, /* 1395 */
-  {    84,     13,     12,      0,      0,  18432,    144, }, /* 1396 */
-  {   157,      7,     12,      0,      0,  18432,     84, }, /* 1397 */
-  {   157,     12,      3,      0,      0,  26624,    106, }, /* 1398 */
-  {   157,     10,      5,      0,      0,  18432,    154, }, /* 1399 */
-  {   157,     21,     12,      0,      0,  18432,    128, }, /* 1400 */
-  {   168,     12,      3,      0,      0,  26624,    106, }, /* 1401 */
-  {   168,      7,      4,      0,      0,  18432,     84, }, /* 1402 */
-  {   168,     10,      5,      0,      0,  18432,    154, }, /* 1403 */
-  {   168,      7,     12,      0,      0,  18432,     84, }, /* 1404 */
-  {   168,     10,      3,      0,      0,  18432,    188, }, /* 1405 */
-  {   168,     12,      3,      0,      0,  26624,    158, }, /* 1406 */
-  {   168,     21,     12,      0,      0,  18432,    128, }, /* 1407 */
-  {   168,     21,     12,      0,      0,  18432,     74, }, /* 1408 */
-  {   168,     13,     12,      0,      0,  18432,    144, }, /* 1409 */
-  {   168,     12,      3,      0,      0,  26624,     98, }, /* 1410 */
-  {    13,     15,     12,      0,      0,  18432,     74, }, /* 1411 */
-  {    13,     21,     12,      0,      0,  18432,     74, }, /* 1412 */
-  {   114,      7,     12,      0,      0,  18432,     84, }, /* 1413 */
-  {   114,     14,     12,      0,      0,  18432,     84, }, /* 1414 */
-  {   114,     21,     12,      0,      0,  18432,    110, }, /* 1415 */
-  {    89,      7,     12,      0,      0,  18432,     84, }, /* 1416 */
-  {    89,     21,     12,      0,      0,  18432,     74, }, /* 1417 */
-  {   125,      7,     12,      0,      0,  18432,     84, }, /* 1418 */
-  {   125,      1,      2,      0,      0,  18432,    346, }, /* 1419 */
-  {   125,     12,      3,      0,      0,  26624,    104, }, /* 1420 */
-  {   125,     12,      3,      0,      0,  26624,     98, }, /* 1421 */
-  {   148,      7,     12,      0,      0,  18432,     84, }, /* 1422 */
-  {    93,      7,     12,      0,      0,  18432,     84, }, /* 1423 */
-  {    93,     12,      3,      0,      0,  26624,    106, }, /* 1424 */
-  {    93,     10,      5,      0,      0,  18432,    154, }, /* 1425 */
-  {    93,     12,      3,      0,      0,  26624,    158, }, /* 1426 */
-  {    93,     13,     12,      0,      0,  18432,    144, }, /* 1427 */
-  {   140,      7,     12,      0,      0,  18432,     84, }, /* 1428 */
-  {   140,     13,     12,      0,      0,  18432,    144, }, /* 1429 */
-  {   140,     21,     12,      0,      0,  18432,    128, }, /* 1430 */
-  {   166,      7,     12,      0,      0,  18432,     84, }, /* 1431 */
-  {   166,     13,     12,      0,      0,  18432,    144, }, /* 1432 */
-  {   137,      7,     12,      0,      0,  18432,     84, }, /* 1433 */
-  {   137,     12,      3,      0,      0,  26624,     98, }, /* 1434 */
-  {   137,     21,     12,      0,      0,  18432,    128, }, /* 1435 */
-  {   138,      7,     12,      0,      0,  18432,     84, }, /* 1436 */
-  {   138,     12,      3,      0,      0,  26624,     98, }, /* 1437 */
-  {   138,     21,     12,      0,      0,  18432,    128, }, /* 1438 */
-  {   138,     21,     12,      0,      0,  18432,    110, }, /* 1439 */
-  {   138,     21,     12,      0,      0,  18432,     74, }, /* 1440 */
-  {   138,     26,     12,      0,      0,  18432,     74, }, /* 1441 */
-  {   138,      6,     12,      0,      0,  18432,    148, }, /* 1442 */
-  {   138,      6,     12,      0,      0,  18432,    138, }, /* 1443 */
-  {   138,     13,     12,      0,      0,  18432,    144, }, /* 1444 */
-  {   138,     15,     12,      0,      0,  18432,     74, }, /* 1445 */
-  {   170,      6,     12,      0,      0,  18432,    148, }, /* 1446 */
-  {   170,      7,     12,      0,      0,  18432,     84, }, /* 1447 */
-  {   170,      7,      7,      0,      0,  18432,     84, }, /* 1448 */
-  {   170,      6,     12,      0,      0,  18432,     94, }, /* 1449 */
-  {   170,     21,     12,      0,      0,  18432,     74, }, /* 1450 */
-  {   170,     21,     12,      0,      0,  18432,    128, }, /* 1451 */
-  {   170,     13,     12,      0,      0,  18432,    144, }, /* 1452 */
-  {   158,      9,     12,      0,     32,  18432,     76, }, /* 1453 */
-  {   158,      5,     12,      0,    -32,  18432,     78, }, /* 1454 */
-  {   158,     15,     12,      0,      0,  18432,     74, }, /* 1455 */
-  {   158,     21,     12,      0,      0,  18432,    110, }, /* 1456 */
-  {   158,     21,     12,      0,      0,  18432,    128, }, /* 1457 */
-  {   158,     21,     12,      0,      0,  18432,     74, }, /* 1458 */
-  {   135,      7,     12,      0,      0,  18432,     84, }, /* 1459 */
-  {   135,     12,      3,      0,      0,  26624,    106, }, /* 1460 */
-  {   135,     10,      5,      0,      0,  18432,    154, }, /* 1461 */
-  {   135,     12,      3,      0,      0,  26624,    132, }, /* 1462 */
-  {   135,      6,     12,      0,      0,  18432,     94, }, /* 1463 */
-  {    81,      6,     12,      0,      0,  18432,    138, }, /* 1464 */
-  {   154,      6,     12,      0,      0,  18432,    138, }, /* 1465 */
-  {    30,     21,     12,      0,      0,  28672,     74, }, /* 1466 */
-  {   165,     12,      3,      0,      0,  26624,    354, }, /* 1467 */
-  {    30,     10,      3,      0,      0,  18432,    356, }, /* 1468 */
-  {    81,      7,     12,      0,      0,  18432,    304, }, /* 1469 */
-  {   165,      7,     12,      0,      0,  18432,    304, }, /* 1470 */
-  {    28,      6,     12,      0,      0,  18432,     94, }, /* 1471 */
-  {   154,      7,     12,      0,      0,  18432,    304, }, /* 1472 */
-  {    65,      7,     12,      0,      0,  18432,     84, }, /* 1473 */
-  {    65,     26,     12,      0,      0,  18432,     74, }, /* 1474 */
-  {    65,     12,      3,      0,      0,  26624,    104, }, /* 1475 */
-  {    65,     12,      3,      0,      0,  26624,    106, }, /* 1476 */
-  {    65,     21,     12,      0,      0,  18432,    128, }, /* 1477 */
-  {    99,      1,      2,      0,      0,   6472,     66, }, /* 1478 */
-  {    99,     13,     12,      0,      0,  10240,    144, }, /* 1479 */
-  {    99,     10,      3,      0,      0,  18432,    358, }, /* 1480 */
-  {    99,     10,      3,      0,      0,  18432,    306, }, /* 1481 */
-  {     1,     12,      3,      0,      0,  26624,    104, }, /* 1482 */
-  {    99,     25,     12,      0,      0,  28672,    360, }, /* 1483 */
-  {    99,     13,     12,      0,      0,  10240,    226, }, /* 1484 */
-  {   150,     26,     12,      0,      0,  18432,     74, }, /* 1485 */
-  {   150,     12,      3,      0,      0,  26624,    104, }, /* 1486 */
-  {   150,     21,     12,      0,      0,  18432,    110, }, /* 1487 */
-  {   150,     21,     12,      0,      0,  18432,    128, }, /* 1488 */
-  {   150,     21,     12,      0,      0,  18432,     74, }, /* 1489 */
-  {    44,     12,      3,      0,      0,  26624,    106, }, /* 1490 */
-  {     2,      6,     12,      0,      0,  18432,     92, }, /* 1491 */
-  {   161,      7,     12,      0,      0,  18432,     84, }, /* 1492 */
-  {   161,     12,      3,      0,      0,  26624,     98, }, /* 1493 */
-  {   161,      6,     12,      0,      0,  18432,    148, }, /* 1494 */
-  {   161,      6,     12,      0,      0,  18432,    138, }, /* 1495 */
-  {   161,     13,     12,      0,      0,  18432,    144, }, /* 1496 */
-  {   161,     26,     12,      0,      0,  18432,     74, }, /* 1497 */
-  {    91,      7,     12,      0,      0,  18432,     84, }, /* 1498 */
-  {    91,     12,      3,      0,      0,  26624,     98, }, /* 1499 */
-  {   162,      7,     12,      0,      0,  18432,     84, }, /* 1500 */
-  {   162,     12,      3,      0,      0,  26624,     98, }, /* 1501 */
-  {   162,     13,     12,      0,      0,  18432,    144, }, /* 1502 */
-  {   162,     23,     12,      0,      0,  14336,     74, }, /* 1503 */
-  {   169,      7,     12,      0,      0,  18432,     84, }, /* 1504 */
-  {   169,      6,     12,      0,      0,  18432,    148, }, /* 1505 */
-  {   169,     12,      3,      0,      0,  26624,    104, }, /* 1506 */
-  {   169,     13,     12,      0,      0,  18432,    144, }, /* 1507 */
-  {    94,      7,     12,      0,      0,  18432,     84, }, /* 1508 */
-  {    94,     12,      3,      0,      0,  26624,     98, }, /* 1509 */
-  {    94,     12,      3,      0,      0,  26624,    164, }, /* 1510 */
-  {    94,     13,     12,      0,      0,  18432,    144, }, /* 1511 */
-  {    94,     21,     12,      0,      0,  18432,     74, }, /* 1512 */
-  {   139,      7,     12,      0,      0,  34816,     84, }, /* 1513 */
-  {   139,     15,     12,      0,      0,  34816,     74, }, /* 1514 */
-  {   139,     12,      3,      0,      0,  26624,     98, }, /* 1515 */
-  {    79,      9,     12,      0,     34,  34816,     76, }, /* 1516 */
-  {    79,      5,     12,      0,    -34,  34816,     78, }, /* 1517 */
-  {    79,     12,      3,      0,      0,  26624,    164, }, /* 1518 */
-  {    79,     12,      3,      0,      0,  26624,    106, }, /* 1519 */
-  {    79,     12,      3,      0,      0,  26624,     98, }, /* 1520 */
-  {    79,      6,     12,      0,      0,  34816,    148, }, /* 1521 */
-  {    79,     13,     12,      0,      0,  34816,    144, }, /* 1522 */
-  {    79,     21,     12,      0,      0,  34816,     74, }, /* 1523 */
-  {    99,     15,     12,      0,      0,      0,     74, }, /* 1524 */
-  {    99,     26,     12,      0,      0,      0,     74, }, /* 1525 */
-  {    99,     23,     12,      0,      0,      0,     74, }, /* 1526 */
-  {     5,      7,     12,      0,      0,      0,    254, }, /* 1527 */
-  {    99,     26,     14,      0,      0,  28672,    362, }, /* 1528 */
-  {    99,     26,     14,      0,      0,  28672,    364, }, /* 1529 */
-  {    98,      2,     14,      0,      0,  18432,    366, }, /* 1530 */
-  {    99,     26,     12,      0,      0,  18432,    368, }, /* 1531 */
-  {    99,     26,     14,      0,      0,  18432,    370, }, /* 1532 */
-  {    99,     26,     14,      0,      0,  18432,    364, }, /* 1533 */
-  {    99,     26,     11,      0,      0,  18432,    372, }, /* 1534 */
-  {    27,     26,     12,      0,      0,  18432,     74, }, /* 1535 */
-  {    99,     26,     14,      0,      0,  18432,    250, }, /* 1536 */
-  {    99,     26,     14,      0,      0,  18784,    364, }, /* 1537 */
-  {    99,     26,     14,      0,      0,  28672,    374, }, /* 1538 */
-  {    99,     26,     14,      0,      0,  28672,    376, }, /* 1539 */
-  {    99,     24,      3,      0,      0,  28672,    378, }, /* 1540 */
-  {    99,     26,     14,      0,      0,  28672,    380, }, /* 1541 */
-  {    99,      1,      3,      0,      0,   6144,    382, }, /* 1542 */
+  {   152,     12,      3,      0,      0,  26624,    106, }, /* 1386 */
+  {   152,     12,      3,      0,      0,  18432,    158, }, /* 1387 */
+  {   152,     21,     12,      0,      0,  18432,    128, }, /* 1388 */
+  {   152,     21,     12,      0,      0,  18432,    110, }, /* 1389 */
+  {   152,     21,     12,      0,      0,  18432,     74, }, /* 1390 */
+  {   152,     13,     12,      0,      0,  18432,    144, }, /* 1391 */
+  {   152,     15,     12,      0,      0,  18432,     74, }, /* 1392 */
+  {   153,     21,     12,      0,      0,  18432,     74, }, /* 1393 */
+  {   153,     21,     12,      0,      0,  18432,    110, }, /* 1394 */
+  {   153,      7,     12,      0,      0,  18432,     84, }, /* 1395 */
+  {   153,     12,      3,      0,      0,  26624,    106, }, /* 1396 */
+  {   153,     10,      5,      0,      0,  18432,    154, }, /* 1397 */
+  {    83,      7,     12,      0,      0,  18432,     84, }, /* 1398 */
+  {    83,     12,      3,      0,      0,  26624,    106, }, /* 1399 */
+  {    83,     12,      3,      0,      0,  26624,     98, }, /* 1400 */
+  {    83,     12,      3,      0,      0,  26624,    158, }, /* 1401 */
+  {    83,      7,      4,      0,      0,  18432,     84, }, /* 1402 */
+  {    83,     13,     12,      0,      0,  18432,    144, }, /* 1403 */
+  {    85,      7,     12,      0,      0,  18432,     84, }, /* 1404 */
+  {    85,     10,      5,      0,      0,  18432,    154, }, /* 1405 */
+  {    85,     12,      3,      0,      0,  26624,    106, }, /* 1406 */
+  {    85,     12,      3,      0,      0,  26624,    158, }, /* 1407 */
+  {    85,     13,     12,      0,      0,  18432,    144, }, /* 1408 */
+  {   173,      7,     12,      0,      0,  18432,     84, }, /* 1409 */
+  {   173,      6,     12,      0,      0,  18432,     96, }, /* 1410 */
+  {   173,     13,     12,      0,      0,  18432,    144, }, /* 1411 */
+  {   157,      7,     12,      0,      0,  18432,     84, }, /* 1412 */
+  {   157,     12,      3,      0,      0,  26624,    106, }, /* 1413 */
+  {   157,     10,      5,      0,      0,  18432,    154, }, /* 1414 */
+  {   157,     21,     12,      0,      0,  18432,    128, }, /* 1415 */
+  {   168,     12,      3,      0,      0,  26624,    106, }, /* 1416 */
+  {   168,      7,      4,      0,      0,  18432,     84, }, /* 1417 */
+  {   168,     10,      5,      0,      0,  18432,    154, }, /* 1418 */
+  {   168,      7,     12,      0,      0,  18432,    156, }, /* 1419 */
+  {   168,     10,      3,      0,      0,  18432,    188, }, /* 1420 */
+  {   168,     12,      3,      0,      0,  26624,    158, }, /* 1421 */
+  {   168,     21,     12,      0,      0,  18432,    128, }, /* 1422 */
+  {   168,     21,     12,      0,      0,  18432,     74, }, /* 1423 */
+  {   168,     13,     12,      0,      0,  18432,    144, }, /* 1424 */
+  {   168,     12,      3,      0,      0,  26624,     98, }, /* 1425 */
+  {    13,     15,     12,      0,      0,  18432,     74, }, /* 1426 */
+  {    13,     21,     12,      0,      0,  18432,     74, }, /* 1427 */
+  {   115,      7,     12,      0,      0,  18432,     84, }, /* 1428 */
+  {   115,     14,     12,      0,      0,  18432,     84, }, /* 1429 */
+  {   115,     21,     12,      0,      0,  18432,    110, }, /* 1430 */
+  {    90,      7,     12,      0,      0,  18432,     84, }, /* 1431 */
+  {    90,     21,     12,      0,      0,  18432,     74, }, /* 1432 */
+  {   126,      7,     12,      0,      0,  18432,     84, }, /* 1433 */
+  {   126,      1,      2,      0,      0,  18432,    344, }, /* 1434 */
+  {   126,     12,      3,      0,      0,  26624,    104, }, /* 1435 */
+  {   126,     12,      3,      0,      0,  26624,     98, }, /* 1436 */
+  {   149,      7,     12,      0,      0,  18432,     84, }, /* 1437 */
+  {    94,      7,     12,      0,      0,  18432,     84, }, /* 1438 */
+  {    94,     12,      3,      0,      0,  26624,    106, }, /* 1439 */
+  {    94,     10,      5,      0,      0,  18432,    154, }, /* 1440 */
+  {    94,     12,      3,      0,      0,  26624,    158, }, /* 1441 */
+  {    94,     13,     12,      0,      0,  18432,    144, }, /* 1442 */
+  {   141,      7,     12,      0,      0,  18432,     84, }, /* 1443 */
+  {   141,     13,     12,      0,      0,  18432,    144, }, /* 1444 */
+  {   141,     21,     12,      0,      0,  18432,    128, }, /* 1445 */
+  {   166,      7,     12,      0,      0,  18432,     84, }, /* 1446 */
+  {   166,     13,     12,      0,      0,  18432,    144, }, /* 1447 */
+  {   138,      7,     12,      0,      0,  18432,     84, }, /* 1448 */
+  {   138,     12,      3,      0,      0,  26624,     98, }, /* 1449 */
+  {   138,     21,     12,      0,      0,  18432,    128, }, /* 1450 */
+  {   139,      7,     12,      0,      0,  18432,     84, }, /* 1451 */
+  {   139,     12,      3,      0,      0,  26624,     98, }, /* 1452 */
+  {   139,     21,     12,      0,      0,  18432,    128, }, /* 1453 */
+  {   139,     21,     12,      0,      0,  18432,    110, }, /* 1454 */
+  {   139,     21,     12,      0,      0,  18432,     74, }, /* 1455 */
+  {   139,     26,     12,      0,      0,  18432,     74, }, /* 1456 */
+  {   139,      6,     12,      0,      0,  18432,    148, }, /* 1457 */
+  {   139,      6,     12,      0,      0,  18432,    138, }, /* 1458 */
+  {   139,     13,     12,      0,      0,  18432,    144, }, /* 1459 */
+  {   139,     15,     12,      0,      0,  18432,     74, }, /* 1460 */
+  {   170,      6,     12,      0,      0,  18432,    148, }, /* 1461 */
+  {   170,      7,     12,      0,      0,  18432,     84, }, /* 1462 */
+  {   170,      7,      7,      0,      0,  18432,     84, }, /* 1463 */
+  {   170,      6,     12,      0,      0,  18432,     94, }, /* 1464 */
+  {   170,     21,     12,      0,      0,  18432,     74, }, /* 1465 */
+  {   170,     21,     12,      0,      0,  18432,    128, }, /* 1466 */
+  {   170,     13,     12,      0,      0,  18432,    144, }, /* 1467 */
+  {   158,      9,     12,      0,     32,  18432,     76, }, /* 1468 */
+  {   158,      5,     12,      0,    -32,  18432,     78, }, /* 1469 */
+  {   158,     15,     12,      0,      0,  18432,     74, }, /* 1470 */
+  {   158,     21,     12,      0,      0,  18432,    110, }, /* 1471 */
+  {   158,     21,     12,      0,      0,  18432,    128, }, /* 1472 */
+  {   158,     21,     12,      0,      0,  18432,     74, }, /* 1473 */
+  {   174,      9,     12,      0,     27,  18432,     76, }, /* 1474 */
+  {   174,      5,     12,      0,    -27,  18432,     78, }, /* 1475 */
+  {   136,      7,     12,      0,      0,  18432,     84, }, /* 1476 */
+  {   136,     12,      3,      0,      0,  26624,    106, }, /* 1477 */
+  {   136,     10,      5,      0,      0,  18432,    154, }, /* 1478 */
+  {   136,     12,      3,      0,      0,  26624,    132, }, /* 1479 */
+  {   136,      6,     12,      0,      0,  18432,     94, }, /* 1480 */
+  {    82,      6,     12,      0,      0,  18432,    138, }, /* 1481 */
+  {   154,      6,     12,      0,      0,  18432,    138, }, /* 1482 */
+  {    30,     21,     12,      0,      0,  28672,     74, }, /* 1483 */
+  {   165,     12,      3,      0,      0,  26624,    352, }, /* 1484 */
+  {    30,     10,      3,      0,      0,  18432,    354, }, /* 1485 */
+  {    30,      6,     12,      0,      0,  18432,    356, }, /* 1486 */
+  {    82,      7,     12,      0,      0,  18432,    302, }, /* 1487 */
+  {   165,      7,     12,      0,      0,  18432,    302, }, /* 1488 */
+  {    28,      6,     12,      0,      0,  18432,     94, }, /* 1489 */
+  {   154,      7,     12,      0,      0,  18432,    302, }, /* 1490 */
+  {    65,      7,     12,      0,      0,  18432,     84, }, /* 1491 */
+  {    65,     26,     12,      0,      0,  18432,     74, }, /* 1492 */
+  {    65,     12,      3,      0,      0,  26624,    104, }, /* 1493 */
+  {    65,     12,      3,      0,      0,  26624,    106, }, /* 1494 */
+  {    65,     21,     12,      0,      0,  18432,    128, }, /* 1495 */
+  {   100,      1,      2,      0,      0,   6504,     66, }, /* 1496 */
+  {   100,     13,     12,      0,      0,  10240,    144, }, /* 1497 */
+  {   100,     10,      3,      0,      0,  18432,    358, }, /* 1498 */
+  {   100,     10,      3,      0,      0,  18432,    304, }, /* 1499 */
+  {     1,     12,      3,      0,      0,  26624,    104, }, /* 1500 */
+  {   100,     25,     12,      0,      0,  28672,    360, }, /* 1501 */
+  {   100,     13,     12,      0,      0,  10240,    226, }, /* 1502 */
+  {   151,     26,     12,      0,      0,  18432,     74, }, /* 1503 */
+  {   151,     12,      3,      0,      0,  26624,    104, }, /* 1504 */
+  {   151,     21,     12,      0,      0,  18432,    110, }, /* 1505 */
+  {   151,     21,     12,      0,      0,  18432,    128, }, /* 1506 */
+  {   151,     21,     12,      0,      0,  18432,     74, }, /* 1507 */
+  {    44,     12,      3,      0,      0,  26624,    106, }, /* 1508 */
+  {     2,      6,     12,      0,      0,  18432,     92, }, /* 1509 */
+  {   161,      7,     12,      0,      0,  18432,     84, }, /* 1510 */
+  {   161,     12,      3,      0,      0,  26624,     98, }, /* 1511 */
+  {   161,      6,     12,      0,      0,  18432,    148, }, /* 1512 */
+  {   161,      6,     12,      0,      0,  18432,    138, }, /* 1513 */
+  {   161,     13,     12,      0,      0,  18432,    144, }, /* 1514 */
+  {   161,     26,     12,      0,      0,  18432,     74, }, /* 1515 */
+  {    92,      7,     12,      0,      0,  18432,     84, }, /* 1516 */
+  {    92,     12,      3,      0,      0,  26624,     98, }, /* 1517 */
+  {   162,      7,     12,      0,      0,  18432,     84, }, /* 1518 */
+  {   162,     12,      3,      0,      0,  26624,     98, }, /* 1519 */
+  {   162,     13,     12,      0,      0,  18432,    144, }, /* 1520 */
+  {   162,     23,     12,      0,      0,  14336,     74, }, /* 1521 */
+  {   169,      7,     12,      0,      0,  18432,     84, }, /* 1522 */
+  {   169,      6,     12,      0,      0,  18432,    148, }, /* 1523 */
+  {   169,     12,      3,      0,      0,  26624,    104, }, /* 1524 */
+  {   169,     13,     12,      0,      0,  18432,    144, }, /* 1525 */
+  {    95,      7,     12,      0,      0,  18432,     84, }, /* 1526 */
+  {    95,     12,      3,      0,      0,  26624,     98, }, /* 1527 */
+  {    95,     12,      3,      0,      0,  26624,    164, }, /* 1528 */
+  {    95,     13,     12,      0,      0,  18432,    144, }, /* 1529 */
+  {    95,     21,     12,      0,      0,  18432,     74, }, /* 1530 */
+  {   172,      7,     12,      0,      0,  18432,     84, }, /* 1531 */
+  {   172,     12,      3,      0,      0,  26624,    106, }, /* 1532 */
+  {   172,      6,     12,      0,      0,  18432,    148, }, /* 1533 */
+  {   140,      7,     12,      0,      0,  34816,     84, }, /* 1534 */
+  {   140,     15,     12,      0,      0,  34816,     74, }, /* 1535 */
+  {   140,     12,      3,      0,      0,  26624,     98, }, /* 1536 */
+  {    79,      9,     12,      0,     34,  34816,     76, }, /* 1537 */
+  {    79,      5,     12,      0,    -34,  34816,     78, }, /* 1538 */
+  {    79,     12,      3,      0,      0,  26624,    164, }, /* 1539 */
+  {    79,     12,      3,      0,      0,  26624,    106, }, /* 1540 */
+  {    79,     12,      3,      0,      0,  26624,     98, }, /* 1541 */
+  {    79,      6,     12,      0,      0,  34816,    148, }, /* 1542 */
+  {    79,     13,     12,      0,      0,  34816,    144, }, /* 1543 */
+  {    79,     21,     12,      0,      0,  34816,     74, }, /* 1544 */
+  {   100,     15,     12,      0,      0,      0,     74, }, /* 1545 */
+  {   100,     26,     12,      0,      0,      0,     74, }, /* 1546 */
+  {   100,     23,     12,      0,      0,      0,     74, }, /* 1547 */
+  {     5,      7,     12,      0,      0,      0,    256, }, /* 1548 */
+  {   100,     26,     14,      0,      0,  28672,    362, }, /* 1549 */
+  {    99,      2,     14,      0,      0,  18432,    364, }, /* 1550 */
+  {   100,     26,     12,      0,      0,  18432,    366, }, /* 1551 */
+  {   100,     26,     14,      0,      0,  18432,    368, }, /* 1552 */
+  {   100,     26,     14,      0,      0,  18432,    362, }, /* 1553 */
+  {   100,     26,     11,      0,      0,  18432,    370, }, /* 1554 */
+  {    27,     26,     12,      0,      0,  18432,     74, }, /* 1555 */
+  {   100,     26,     14,      0,      0,  18432,    252, }, /* 1556 */
+  {   100,     26,     14,      0,      0,  18816,    362, }, /* 1557 */
+  {   100,     26,     14,      0,      0,  28672,    372, }, /* 1558 */
+  {   100,     26,     14,      0,      0,  28672,    374, }, /* 1559 */
+  {   100,     24,      3,      0,      0,  28672,    376, }, /* 1560 */
+  {   100,     26,     14,      0,      0,  28672,    378, }, /* 1561 */
+  {   100,      1,      3,      0,      0,   6144,    380, }, /* 1562 */
 };
 
 const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
@@ -2144,8 +2172,8 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 213,213,213,213,214,215,216,217,146,146,218,146,219,220,221,222, /* U+16800 */
 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17000 */
 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17800 */
-223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,224, /* U+18000 */
-223,223,223,223,223,223,225,225,225,226,227,146,146,146,146,146, /* U+18800 */
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+18000 */
+223,223,223,223,223,223,224,224,224,225,226,227,146,146,146,146, /* U+18800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1A000 */
@@ -2156,10 +2184,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,236,237,236,236,236,238,239,240, /* U+1C800 */
 241,242,243,244,245,246,247,146,248,249,250,251,252,253,254,255, /* U+1D000 */
 256,256,256,256,257,258,146,146,146,146,146,146,146,146,259,146, /* U+1D800 */
-260,261,262,146,146,263,146,146,146,264,146,265,146,146,146,266, /* U+1E000 */
-267,268,269,270,270,270,270,270,271,272,273,270,274,275,270,270, /* U+1E800 */
-276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291, /* U+1F000 */
-292,293,294,295,296,297,236,298,281,281,281,281,281,281,281,299, /* U+1F800 */
+260,261,262,146,146,263,146,146,146,264,146,265,146,266,146,267, /* U+1E000 */
+268,269,270,271,271,271,271,271,272,273,274,271,275,276,271,271, /* U+1E800 */
+277,278,279,280,281,282,283,284,285,286,287,288,289,290,236,291, /* U+1F000 */
+292,293,294,295,296,297,236,298,282,282,282,282,282,282,282,299, /* U+1F800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20000 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21000 */
@@ -2182,23 +2210,23 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,300,101,101, /* U+2A000 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2A800 */
-101,101,101,101,101,101,101,101,101,101,101,101,101,101,301,101, /* U+2B000 */
-302,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B000 */
+301,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2C000 */
-101,101,101,101,101,101,101,101,101,101,101,101,101,303,101,101, /* U+2C800 */
+101,101,101,101,101,101,101,101,101,101,101,101,101,302,101,101, /* U+2C800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D000 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2E000 */
-101,101,101,101,101,101,101,304,101,101,101,101,305,146,146,146, /* U+2E800 */
+101,101,101,101,101,101,101,303,101,101,101,101,304,146,146,146, /* U+2E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+2F000 */
-129,129,129,129,306,146,146,146,146,146,146,146,146,146,146,307, /* U+2F800 */
+129,129,129,129,305,146,146,146,146,146,146,146,146,146,146,306, /* U+2F800 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30000 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30800 */
-101,101,101,101,101,101,308,101,101,101,101,101,101,101,101,101, /* U+31000 */
+101,101,101,101,101,101,307,101,101,101,101,101,101,101,101,101, /* U+31000 */
 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+31800 */
-101,101,101,101,101,101,101,309,146,146,146,146,146,146,146,146, /* U+32000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+32800 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33000 */
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32000 */
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32800 */
+101,101,101,101,101,101,101,101,308,146,146,146,146,146,146,146, /* U+33000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34800 */
@@ -2223,7 +2251,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+3F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+3F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41000 */
@@ -2255,7 +2283,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+4F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+4F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51000 */
@@ -2287,7 +2315,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+5F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+5F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61000 */
@@ -2319,7 +2347,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+6F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+6F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71000 */
@@ -2351,7 +2379,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+7F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+7F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81000 */
@@ -2383,7 +2411,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+8F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+8F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91000 */
@@ -2415,7 +2443,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9F000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+9F800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+9F800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1000 */
@@ -2447,7 +2475,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AF000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+AF800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+AF800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1000 */
@@ -2479,7 +2507,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BF000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+BF800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+BF800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1000 */
@@ -2511,7 +2539,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CF000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+CF800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+CF800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1000 */
@@ -2543,9 +2571,9 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DF000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+DF800 */
-310,311,312,313,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0000 */
-311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+DF800 */
+309,310,311,312,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0000 */
+310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2000 */
@@ -2575,7 +2603,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE000 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE800 */
 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EF000 */
-146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+EF800 */
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+EF800 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0000 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0800 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1000 */
@@ -2607,7 +2635,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE000 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE800 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FF000 */
-128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+FF800 */
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+FF800 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100000 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100800 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101000 */
@@ -2639,10 +2667,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E000 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E800 */
 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10F000 */
-128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+10F800 */
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+10F800 */
 };
 
-const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
+const uint16_t PRIV(ucd_stage2)[] = { /* 80384 bytes, block = 128 */
 
 /* block 0 */
   0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  1,  3,  4,  0,  0,
@@ -2696,7 +2724,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 
 /* block 5 */
 140, 70,141,140, 70, 70, 70,142,140,143,144,144,145, 70, 70, 70,
- 70, 70,146, 70, 93, 70, 70, 70, 70, 70, 70, 70, 70,147,148, 70,
+ 70, 70,146, 70, 93, 93, 70, 70, 70, 70, 70, 70, 70,147,148, 70,
  70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
 149,149,150,149,149,149,149,149,149,151,151,152,153,152,152,152,
 154,154, 46, 46, 46, 46,151,155,151,155,155,155,151,156,151,151,
@@ -2707,7 +2735,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 /* block 6 */
 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
 174,177,176,178,176,176,176,176,176,176,176,176,176,176,176,176,
-179,176,176,180,181,179,176,176,176,176,176,176,176,182,179,176,
+176,176,176,179,180,181,176,176,176,176,176,176,176,182,181,176,
 183,184,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
 176,176,185,176,176,186,176,176,176,176,176,176,176,176,176,187,
 176,176,176,176,176,176,176,176,188,189,189,189,189,176,190,176,
@@ -2757,419 +2785,419 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 /* block 11 */
 291,291,291,291,291,291,291,292,290,293,294,196,196,295,295,296,
 297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,
-298,298,299,298,298,298,298,298,298,298,298,298,298,298,298,298,
-300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,300,
-302,300,300,303,300,304,302,304,297,297,297,297,297,297,297,297,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,297,297,297,297,305,
-305,305,305,302,306,297,297,297,297,297,297,297,297,297,297,297,
+298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,
+299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,299,
+301,299,299,302,299,299,301,299,297,297,297,297,297,297,297,297,
+303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,
+303,303,303,303,303,303,303,303,303,303,303,297,297,297,297,303,
+303,303,303,301,304,297,297,297,297,297,297,297,297,297,297,297,
 
 /* block 12 */
-307,307,307,307,307,308,309,309,310,311,311,312,313,314,315,315,
-316,316,316,316,316,316,316,316,316,316,316,317,318,319,319,320,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-322,321,321,321,321,321,321,321,321,321,321,323,323,323,323,323,
-323,323,323,324,325,325,316,326,327,316,316,316,316,316,316,316,
-328,328,328,328,328,328,328,328,328,328,311,329,329,314,321,321,
-324,321,321,330,321,321,321,321,321,321,321,321,321,321,321,321,
+305,305,305,305,305,306,307,307,308,309,309,310,311,312,313,313,
+314,314,314,314,314,314,314,314,314,314,314,315,316,317,317,318,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+320,319,319,319,319,319,319,319,319,319,319,321,321,321,321,321,
+321,321,321,322,323,323,314,324,325,314,314,314,314,314,314,314,
+326,326,326,326,326,326,326,326,326,326,309,327,327,312,319,319,
+322,319,319,328,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 13 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,331,321,316,316,316,316,316,316,332,308,315,333,
-333,316,316,332,316,334,334,332,332,315,333,333,333,316,321,321,
-335,335,335,335,335,335,335,335,335,335,321,321,321,336,336,321,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,329,319,314,314,314,314,314,314,330,306,313,331,
+331,314,314,330,314,332,332,330,330,313,331,331,331,314,319,319,
+333,333,333,333,333,333,333,333,333,333,319,319,319,334,334,319,
 
 /* block 14 */
-337,337,337,338,338,338,338,338,338,338,338,339,338,339,340,341,
-342,343,342,342,342,342,342,342,342,342,342,342,342,342,342,342,
+335,335,335,336,336,336,336,336,336,336,336,337,336,337,338,339,
+340,341,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
 342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-345,345,345,345,345,345,345,345,345,345,345,340,340,342,342,342,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+343,343,343,343,343,343,343,343,343,343,343,338,338,340,340,340,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 15 */
-346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
-346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
-346,346,346,346,346,346,347,347,347,347,347,347,347,347,347,347,
-347,346,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,
-349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,
-349,349,349,349,349,349,349,349,349,349,349,350,350,350,350,350,
-350,350,350,350,351,351,352,353,354,355,356,297,297,357,358,358,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345,
+345,344,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
+346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347,
+347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,
+347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348,
+348,348,348,348,349,349,350,351,352,353,354,297,297,355,356,356,
 
 /* block 16 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,360,360,361,361,362,360,360,360,360,360,
-360,360,360,360,362,360,360,360,362,360,360,360,360,363,297,297,
-364,364,364,364,364,364,365,366,364,366,364,364,364,366,366,297,
-367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,
-367,367,367,367,367,367,367,367,367,368,368,368,297,297,369,297,
-342,342,342,342,342,342,342,342,342,342,342,340,340,340,340,340,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
+357,357,357,357,357,357,358,358,359,359,360,358,358,358,358,358,
+358,358,358,358,360,358,358,358,360,358,358,358,358,361,297,297,
+362,362,362,362,362,362,363,364,362,364,362,362,362,364,364,297,
+365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,
+365,365,365,365,365,365,365,365,365,366,366,366,297,297,367,297,
+340,340,340,340,340,340,340,340,340,340,340,338,338,338,338,338,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 17 */
-321,321,321,321,321,321,321,321,370,321,321,321,321,321,321,340,
-307,307,340,340,340,340,340,316,333,333,333,333,333,333,333,333,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,334,327,327,333,327,327,327,
-333,333,333,371,316,316,316,316,316,316,316,316,316,316,316,316,
-372,372,308,326,326,326,326,326,326,326,333,333,333,333,333,333,
-326,326,326,373,326,326,326,326,326,326,326,326,326,326,326,316,
+319,319,319,319,319,319,319,319,368,319,319,319,319,319,319,319,
+305,305,338,338,338,338,338,314,331,331,331,331,331,331,331,331,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,332,325,325,331,325,325,325,
+331,331,331,369,314,314,314,314,314,314,314,314,314,314,314,314,
+370,370,306,324,324,324,324,324,324,324,331,331,331,331,331,331,
+324,324,324,371,324,324,324,324,324,324,324,324,324,324,324,314,
 
 /* block 18 */
-374,374,374,375,376,376,376,376,376,376,376,376,376,376,376,376,
-376,376,376,376,376,377,377,377,377,377,377,377,377,377,377,377,
-377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
-377,377,377,377,377,377,377,377,377,377,374,375,378,376,375,375,
-375,374,374,374,374,374,374,374,374,375,375,375,375,379,375,375,
-376,380,381,176,176,374,374,374,377,377,377,377,377,377,377,377,
-376,376,374,374,382,383,384,384,384,384,384,384,384,384,384,384,
-385,386,376,376,376,376,376,376,377,377,377,377,377,377,377,377,
+372,372,372,373,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375,
+375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
+375,375,375,375,375,375,375,375,375,375,372,373,376,374,373,373,
+373,372,372,372,372,372,372,372,372,373,373,373,373,377,373,373,
+374,378,379,176,176,372,372,372,375,375,375,375,375,375,375,375,
+374,374,372,372,380,381,382,382,382,382,382,382,382,382,382,382,
+383,384,374,374,374,374,374,374,375,375,375,375,375,375,375,375,
 
 /* block 19 */
-387,388,389,389,196,387,387,387,387,387,387,387,387,196,196,387,
-387,196,196,387,387,390,390,390,390,390,390,390,390,390,390,390,
-390,390,390,390,390,390,390,390,390,196,390,390,390,390,390,390,
-390,196,390,196,196,196,390,390,390,390,196,196,391,387,392,389,
-389,388,388,388,388,196,196,389,389,196,196,389,389,393,387,196,
-196,196,196,196,196,196,196,392,196,196,196,196,390,390,196,390,
-387,387,388,388,196,196,394,394,394,394,394,394,394,394,394,394,
-390,390,395,395,396,396,396,396,396,396,397,395,387,398,399,196,
+385,386,387,387,196,385,385,385,385,385,385,385,385,196,196,385,
+385,196,196,385,385,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,196,388,388,388,388,388,388,
+388,196,388,196,196,196,388,388,388,388,196,196,389,385,390,387,
+387,386,386,386,386,196,196,387,387,196,196,387,387,391,385,196,
+196,196,196,196,196,196,196,390,196,196,196,196,388,388,196,388,
+385,385,386,386,196,196,392,392,392,392,392,392,392,392,392,392,
+388,388,393,393,394,394,394,394,394,394,395,393,385,396,397,196,
 
 /* block 20 */
-196,400,400,401,196,402,402,402,402,402,402,196,196,196,196,402,
-402,196,196,402,402,402,402,402,402,402,402,402,402,402,402,402,
-402,402,402,402,402,402,402,402,402,196,402,402,402,402,402,402,
-402,196,402,402,196,402,402,196,402,402,196,196,403,196,401,401,
-401,400,400,196,196,196,196,400,400,196,196,400,400,404,196,196,
-196,400,196,196,196,196,196,196,196,402,402,402,402,196,402,196,
-196,196,196,196,196,196,405,405,405,405,405,405,405,405,405,405,
-400,406,402,402,402,400,407,196,196,196,196,196,196,196,196,196,
+196,398,398,399,196,400,400,400,400,400,400,196,196,196,196,400,
+400,196,196,400,400,400,400,400,400,400,400,400,400,400,400,400,
+400,400,400,400,400,400,400,400,400,196,400,400,400,400,400,400,
+400,196,400,400,196,400,400,196,400,400,196,196,401,196,399,399,
+399,398,398,196,196,196,196,398,398,196,196,398,398,402,196,196,
+196,398,196,196,196,196,196,196,196,400,400,400,400,196,400,196,
+196,196,196,196,196,196,403,403,403,403,403,403,403,403,403,403,
+398,404,400,400,400,398,405,196,196,196,196,196,196,196,196,196,
 
 /* block 21 */
-196,408,408,409,196,410,410,410,410,410,410,410,410,410,196,410,
-410,410,196,410,410,411,411,411,411,411,411,411,411,411,411,411,
-411,411,411,411,411,411,411,411,411,196,411,411,411,411,411,411,
-411,196,411,411,196,411,411,411,411,411,196,196,412,410,409,409,
-409,408,408,408,408,408,196,408,408,409,196,409,409,413,196,196,
-410,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-410,410,408,408,196,196,414,414,414,414,414,414,414,414,414,414,
-415,416,196,196,196,196,196,196,196,411,408,417,408,412,412,412,
+196,406,406,407,196,408,408,408,408,408,408,408,408,408,196,408,
+408,408,196,408,408,409,409,409,409,409,409,409,409,409,409,409,
+409,409,409,409,409,409,409,409,409,196,409,409,409,409,409,409,
+409,196,409,409,196,409,409,409,409,409,196,196,410,408,407,407,
+407,406,406,406,406,406,196,406,406,407,196,407,407,411,196,196,
+408,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+408,408,406,406,196,196,412,412,412,412,412,412,412,412,412,412,
+413,414,196,196,196,196,196,196,196,409,406,415,406,410,410,410,
 
 /* block 22 */
-196,418,419,419,196,420,420,420,420,420,420,420,420,196,196,420,
-420,196,196,420,420,421,421,421,421,421,421,421,421,421,421,421,
-421,421,421,421,421,421,421,421,421,196,421,421,421,421,421,421,
-421,196,421,421,196,421,421,421,421,421,196,196,422,420,423,418,
-419,418,418,418,418,196,196,419,419,196,196,419,419,424,196,196,
-196,196,196,196,196,425,418,423,196,196,196,196,421,421,196,421,
-420,420,418,418,196,196,426,426,426,426,426,426,426,426,426,426,
-427,421,428,428,428,428,428,428,196,196,196,196,196,196,196,196,
+196,416,417,417,196,418,418,418,418,418,418,418,418,196,196,418,
+418,196,196,418,418,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,196,419,419,419,419,419,419,
+419,196,419,419,196,419,419,419,419,419,196,196,420,418,421,416,
+417,416,416,416,416,196,196,417,417,196,196,417,417,422,196,196,
+196,196,196,196,196,423,416,421,196,196,196,196,419,419,196,419,
+418,418,416,416,196,196,424,424,424,424,424,424,424,424,424,424,
+425,419,426,426,426,426,426,426,196,196,196,196,196,196,196,196,
 
 /* block 23 */
-196,196,429,430,196,430,430,430,430,430,430,196,196,196,430,430,
-430,196,430,430,430,430,196,196,196,430,430,196,430,196,430,430,
-196,196,196,430,430,196,196,196,430,430,430,196,196,196,430,430,
-430,430,430,430,430,430,430,430,430,430,196,196,196,196,431,432,
-429,432,432,196,196,196,432,432,432,196,432,432,432,433,196,196,
-430,196,196,196,196,196,196,431,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,434,434,434,434,434,434,434,434,434,434,
-435,435,435,436,437,437,437,437,437,438,437,196,196,196,196,196,
+196,196,427,428,196,428,428,428,428,428,428,196,196,196,428,428,
+428,196,428,428,428,428,196,196,196,428,428,196,428,196,428,428,
+196,196,196,428,428,196,196,196,428,428,428,196,196,196,428,428,
+428,428,428,428,428,428,428,428,428,428,196,196,196,196,429,430,
+427,430,430,196,196,196,430,430,430,196,430,430,430,431,196,196,
+428,196,196,196,196,196,196,429,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,432,432,432,432,432,432,432,432,432,432,
+433,433,433,434,435,435,435,435,435,436,435,196,196,196,196,196,
 
 /* block 24 */
-439,440,440,440,439,441,441,441,441,441,441,441,441,196,441,441,
-441,196,441,441,441,442,442,442,442,442,442,442,442,442,442,442,
-442,442,442,442,442,442,442,442,442,196,442,442,442,442,442,442,
-442,442,442,442,442,442,442,442,442,442,196,196,443,441,439,439,
-439,440,440,440,440,196,439,439,439,196,439,439,439,444,196,196,
-196,196,196,196,196,439,439,196,442,442,442,196,196,441,196,196,
-441,441,439,439,196,196,445,445,445,445,445,445,445,445,445,445,
-196,196,196,196,196,196,196,446,447,447,447,447,447,447,447,448,
+437,438,438,438,437,439,439,439,439,439,439,439,439,196,439,439,
+439,196,439,439,439,440,440,440,440,440,440,440,440,440,440,440,
+440,440,440,440,440,440,440,440,440,196,440,440,440,440,440,440,
+440,440,440,440,440,440,440,440,440,440,196,196,441,439,437,437,
+437,438,438,438,438,196,437,437,437,196,437,437,437,442,196,196,
+196,196,196,196,196,437,437,196,440,440,440,196,439,439,196,196,
+439,439,437,437,196,196,443,443,443,443,443,443,443,443,443,443,
+196,196,196,196,196,196,196,444,445,445,445,445,445,445,445,446,
 
 /* block 25 */
-449,450,451,451,452,449,449,449,449,449,449,449,449,196,449,449,
-449,196,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
-449,449,449,449,449,449,449,449,449,196,449,449,449,449,449,449,
-449,449,449,449,196,449,449,449,449,449,196,196,453,449,451,454,
-455,451,455,451,451,196,454,455,455,196,455,455,450,456,196,196,
-196,196,196,196,196,455,455,196,196,196,196,196,196,449,449,196,
-449,449,450,450,196,196,457,457,457,457,457,457,457,457,457,457,
-196,449,449,451,196,196,196,196,196,196,196,196,196,196,196,196,
+447,448,449,449,450,447,447,447,447,447,447,447,447,196,447,447,
+447,196,447,447,447,447,447,447,447,447,447,447,447,447,447,447,
+447,447,447,447,447,447,447,447,447,196,447,447,447,447,447,447,
+447,447,447,447,196,447,447,447,447,447,196,196,451,447,449,452,
+453,449,453,449,449,196,452,453,453,196,453,453,448,454,196,196,
+196,196,196,196,196,453,453,196,196,196,196,196,447,447,447,196,
+447,447,448,448,196,196,455,455,455,455,455,455,455,455,455,455,
+196,447,447,449,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 26 */
-458,458,459,459,460,460,460,460,460,460,460,460,460,196,460,460,
-460,196,460,460,460,461,461,461,461,461,461,461,461,461,461,461,
-461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,
-461,461,461,461,461,461,461,461,461,461,461,462,462,460,463,459,
-459,458,458,458,458,196,459,459,459,196,459,459,459,462,464,465,
-196,196,196,196,460,460,460,463,466,466,466,466,466,466,466,460,
-460,460,458,458,196,196,467,467,467,467,467,467,467,467,467,467,
-466,466,466,466,466,466,466,466,466,465,460,460,460,460,460,460,
+456,456,457,457,458,458,458,458,458,458,458,458,458,196,458,458,
+458,196,458,458,458,459,459,459,459,459,459,459,459,459,459,459,
+459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
+459,459,459,459,459,459,459,459,459,459,459,460,460,458,461,457,
+457,456,456,456,456,196,457,457,457,196,457,457,457,460,462,463,
+196,196,196,196,458,458,458,461,464,464,464,464,464,464,464,458,
+458,458,456,456,196,196,465,465,465,465,465,465,465,465,465,465,
+464,464,464,464,464,464,464,464,464,463,458,458,458,458,458,458,
 
 /* block 27 */
-196,468,469,469,196,470,470,470,470,470,470,470,470,470,470,470,
-470,470,470,470,470,470,470,196,196,196,470,470,470,470,470,470,
-470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,
-470,470,196,470,470,470,470,470,470,470,470,470,196,470,196,196,
-470,470,470,470,470,470,470,196,196,196,471,196,196,196,196,472,
-469,469,468,468,468,196,468,196,469,469,469,469,469,469,469,472,
-196,196,196,196,196,196,473,473,473,473,473,473,473,473,473,473,
-196,196,469,469,474,196,196,196,196,196,196,196,196,196,196,196,
+196,466,467,467,196,468,468,468,468,468,468,468,468,468,468,468,
+468,468,468,468,468,468,468,196,196,196,468,468,468,468,468,468,
+468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,
+468,468,196,468,468,468,468,468,468,468,468,468,196,468,196,196,
+468,468,468,468,468,468,468,196,196,196,469,196,196,196,196,470,
+467,467,466,466,466,196,466,196,467,467,467,467,467,467,467,470,
+196,196,196,196,196,196,471,471,471,471,471,471,471,471,471,471,
+196,196,467,467,472,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 28 */
-196,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,476,475,477,476,476,476,476,476,476,478,196,196,196,196,479,
-480,480,480,480,480,475,481,482,482,482,482,482,482,476,482,483,
-484,484,484,484,484,484,484,484,484,484,485,485,196,196,196,196,
+196,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,
+473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,
+473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,
+473,474,473,475,474,474,474,474,474,474,476,196,196,196,196,477,
+478,478,478,478,478,473,479,480,480,480,480,480,480,474,480,481,
+482,482,482,482,482,482,482,482,482,482,483,483,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 29 */
-196,486,486,196,486,196,486,486,486,486,486,196,486,486,486,486,
-486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,
-486,486,486,486,196,486,196,486,486,486,486,486,486,486,486,486,
-486,487,486,488,487,487,487,487,487,487,489,487,487,486,196,196,
-490,490,490,490,490,196,491,196,492,492,492,492,492,487,493,196,
-494,494,494,494,494,494,494,494,494,494,196,196,486,486,486,486,
+196,484,484,196,484,196,484,484,484,484,484,196,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,196,484,196,484,484,484,484,484,484,484,484,484,
+484,485,484,486,485,485,485,485,485,485,487,485,485,484,196,196,
+488,488,488,488,488,196,489,196,490,490,490,490,490,485,491,196,
+492,492,492,492,492,492,492,492,492,492,196,196,484,484,484,484,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 30 */
-495,496,496,496,497,497,497,497,498,497,497,497,497,498,498,498,
-498,498,498,496,497,496,496,496,499,499,496,496,496,496,496,496,
-500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501,
-501,501,501,501,496,499,496,499,496,499,502,503,502,503,504,504,
-495,495,495,495,495,495,495,495,196,495,495,495,495,495,495,495,
-495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,
-495,495,495,495,495,495,495,495,495,495,495,495,495,196,196,196,
-196,505,505,505,505,505,505,506,505,506,505,505,505,505,505,507,
+493,494,494,494,495,495,495,495,496,495,495,495,495,496,496,496,
+496,496,496,494,495,494,494,494,497,497,494,494,494,494,494,494,
+498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499,
+499,499,499,499,494,497,494,497,494,497,500,501,500,501,502,502,
+493,493,493,493,493,493,493,493,196,493,493,493,493,493,493,493,
+493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,
+493,493,493,493,493,493,493,493,493,493,493,493,493,196,196,196,
+196,503,503,503,503,503,503,504,503,504,503,503,503,503,503,505,
 
 /* block 31 */
-505,505,508,508,509,497,499,499,495,495,495,495,495,505,505,505,
-505,505,505,505,505,505,505,505,196,505,505,505,505,505,505,505,
-505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,
-505,505,505,505,505,505,505,505,505,505,505,505,505,196,496,496,
-496,496,496,496,496,496,499,496,496,496,496,496,496,196,496,496,
-497,497,497,497,497,510,510,510,510,497,497,196,196,196,196,196,
+503,503,506,506,507,495,497,497,493,493,493,493,493,503,503,503,
+503,503,503,503,503,503,503,503,196,503,503,503,503,503,503,503,
+503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,
+503,503,503,503,503,503,503,503,503,503,503,503,503,196,494,494,
+494,494,494,494,494,494,497,494,494,494,494,494,494,196,494,494,
+495,495,495,495,495,508,508,508,508,495,495,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 32 */
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,512,512,513,513,513,
-513,514,513,513,513,513,513,515,512,516,516,514,514,513,513,511,
-517,517,517,517,517,517,517,517,517,517,518,518,519,519,519,519,
-511,511,511,511,511,511,514,514,513,513,511,511,511,511,513,513,
-513,511,512,520,520,511,511,512,512,520,520,520,520,520,511,511,
-511,513,513,513,513,511,511,511,511,511,511,511,511,511,511,511,
+509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,
+509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,
+509,509,509,509,509,509,509,509,509,509,509,510,510,511,511,511,
+511,512,511,511,511,511,511,513,510,514,514,512,512,511,511,509,
+515,515,515,515,515,515,515,515,515,515,516,516,517,517,517,517,
+509,509,509,509,509,509,512,512,511,511,509,509,509,509,511,511,
+511,509,510,518,518,509,509,510,510,518,518,518,518,518,509,509,
+509,511,511,511,511,509,509,509,509,509,509,509,509,509,509,509,
 
 /* block 33 */
-511,511,513,512,514,513,513,520,520,520,520,520,520,521,511,520,
-522,522,522,522,522,522,522,522,522,522,520,520,512,513,523,523,
-524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,
-524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,
-524,524,524,524,524,524,196,524,196,196,196,196,196,524,196,196,
-525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,
-525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,
-525,525,525,525,525,525,525,525,525,525,525,526,527,525,525,525,
+509,509,511,510,512,511,511,518,518,518,518,518,518,519,509,518,
+520,520,520,520,520,520,520,520,520,520,518,518,510,511,521,521,
+522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,
+522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,
+522,522,522,522,522,522,196,522,196,196,196,196,196,522,196,196,
+523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,
+523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,
+523,523,523,523,523,523,523,523,523,523,523,524,525,523,523,523,
 
 /* block 34 */
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,529,
-530,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527,
+528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
+529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
 
 /* block 35 */
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
+529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
+529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
+529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
 
 /* block 36 */
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196,
-533,533,533,533,533,533,533,196,533,196,533,533,533,533,196,196,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196,
+531,531,531,531,531,531,531,196,531,196,531,531,531,531,196,196,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
 
 /* block 37 */
-533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,196,
-533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
+531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,196,
+531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
 
 /* block 38 */
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,533,533,533,533,196,196,534,534,534,
-535,536,537,536,536,536,536,537,537,538,538,538,538,538,538,538,
-538,538,539,539,539,539,539,539,539,539,539,539,539,196,196,196,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,531,531,531,531,196,196,532,532,532,
+533,534,535,534,534,534,534,535,535,536,536,536,536,536,536,536,
+536,536,537,537,537,537,537,537,537,537,537,537,537,196,196,196,
 
 /* block 39 */
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-540,540,540,540,540,540,540,540,540,540,196,196,196,196,196,196,
-541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,
-541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,
-541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,
-541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,
-541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,
-542,542,542,542,542,542,196,196,543,543,543,543,543,543,196,196,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+538,538,538,538,538,538,538,538,538,538,196,196,196,196,196,196,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+540,540,540,540,540,540,196,196,541,541,541,541,541,541,196,196,
 
 /* block 40 */
-544,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
+542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
 
 /* block 41 */
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
 
 /* block 42 */
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,546,547,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,544,545,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
 
 /* block 43 */
-548,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,
-549,549,549,549,549,549,549,549,549,549,549,550,551,196,196,196,
-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
-552,552,552,552,552,552,552,552,552,552,552,553,553,553,554,554,
-554,552,552,552,552,552,552,552,552,196,196,196,196,196,196,196,
+546,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
+547,547,547,547,547,547,547,547,547,547,547,548,549,196,196,196,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,551,551,551,552,552,
+552,550,550,550,550,550,550,550,550,196,196,196,196,196,196,196,
 
 /* block 44 */
-555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,
-555,555,556,556,557,558,196,196,196,196,196,196,196,196,196,555,
-559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
-559,559,560,560,561,562,562,196,196,196,196,196,196,196,196,196,
-563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,
-563,563,564,564,196,196,196,196,196,196,196,196,196,196,196,196,
-565,565,565,565,565,565,565,565,565,565,565,565,565,196,565,565,
-565,196,566,566,196,196,196,196,196,196,196,196,196,196,196,196,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,554,554,555,556,196,196,196,196,196,196,196,196,196,553,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
+557,557,558,558,559,560,560,196,196,196,196,196,196,196,196,196,
+561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,
+561,561,562,562,196,196,196,196,196,196,196,196,196,196,196,196,
+563,563,563,563,563,563,563,563,563,563,563,563,563,196,563,563,
+563,196,564,564,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 45 */
-567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,
-567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,
-567,567,567,568,568,567,567,567,567,567,567,567,567,567,567,567,
-567,567,567,567,569,569,570,571,571,571,571,571,571,571,570,570,
-570,570,570,570,570,570,571,570,570,572,572,572,572,572,572,572,
-572,572,573,572,574,574,575,576,577,577,575,578,567,572,196,196,
+565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,
+565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,
+565,565,565,566,566,565,565,565,565,565,565,565,565,565,565,565,
+565,565,565,565,567,567,568,569,569,569,569,569,569,569,568,568,
+568,568,568,568,568,568,569,568,568,570,570,570,570,570,570,570,
+570,570,571,570,572,572,573,574,575,575,573,576,577,570,196,196,
+578,578,578,578,578,578,578,578,578,578,196,196,196,196,196,196,
 579,579,579,579,579,579,579,579,579,579,196,196,196,196,196,196,
-580,580,580,580,580,580,580,580,580,580,196,196,196,196,196,196,
 
 /* block 46 */
-581,581,582,583,584,582,585,581,584,586,587,588,588,588,589,588,
-590,590,590,590,590,590,590,590,590,590,196,196,196,196,196,196,
-591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-591,591,591,592,591,591,591,591,591,591,591,591,591,591,591,591,
-591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-591,591,591,591,591,591,591,591,591,196,196,196,196,196,196,196,
+580,580,581,582,583,581,584,580,583,585,586,587,587,587,588,587,
+589,589,589,589,589,589,589,589,589,589,196,196,196,196,196,196,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,591,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,196,196,196,196,196,196,196,
 
 /* block 47 */
-591,591,591,591,591,593,593,591,591,591,591,591,591,591,591,591,
-591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-591,591,591,591,591,591,591,591,591,594,591,196,196,196,196,196,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,196,196,196,196,196,196,196,196,196,196,
+590,590,590,590,590,592,592,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,593,590,196,196,196,196,196,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,196,196,196,196,196,196,196,196,196,196,
 
 /* block 48 */
-595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,
-595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,196,
-596,596,596,597,597,597,597,596,596,597,597,597,196,196,196,196,
-597,597,596,597,597,597,597,597,597,598,598,598,196,196,196,196,
-599,196,196,196,600,600,601,601,601,601,601,601,601,601,601,601,
-602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,
-602,602,602,602,602,602,602,602,602,602,602,602,602,602,196,196,
-602,602,602,602,602,196,196,196,196,196,196,196,196,196,196,196,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,196,
+595,595,595,596,596,596,596,595,595,596,596,596,196,196,196,196,
+596,596,595,596,596,596,596,596,596,597,597,597,196,196,196,196,
+598,196,196,196,599,599,600,600,600,600,600,600,600,600,600,600,
+601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
+601,601,601,601,601,601,601,601,601,601,601,601,601,601,196,196,
+601,601,601,601,601,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 49 */
-603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,
-603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,
-603,603,603,603,603,603,603,603,603,603,603,603,196,196,196,196,
-603,603,603,603,603,604,604,604,603,603,604,603,603,603,603,603,
-603,603,603,603,603,603,603,603,603,603,196,196,196,196,196,196,
-605,605,605,605,605,605,605,605,605,605,606,196,196,196,607,607,
-608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,
-608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,
+602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,
+602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,
+602,602,602,602,602,602,602,602,602,602,602,602,196,196,196,196,
+602,602,602,602,602,603,603,603,602,602,603,602,602,602,602,602,
+602,602,602,602,602,602,602,602,602,602,196,196,196,196,196,196,
+604,604,604,604,604,604,604,604,604,604,605,196,196,196,606,606,
+607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,
+607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,
 
 /* block 50 */
-609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,
-609,609,609,609,609,609,609,610,610,611,611,610,196,196,612,612,
-613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,
-613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,
-613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,
-613,613,613,613,613,614,615,614,615,615,615,615,615,615,615,196,
-616,617,615,617,617,615,615,615,615,615,615,615,615,614,614,614,
-614,614,614,615,615,618,618,618,618,618,618,618,618,196,196,618,
+608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,
+608,608,608,608,608,608,608,609,609,610,610,609,196,196,611,611,
+612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
+612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
+612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
+612,612,612,612,612,613,614,613,614,614,614,614,614,614,614,196,
+615,616,614,616,616,614,614,614,614,614,614,614,614,613,613,613,
+613,613,613,614,614,617,617,617,617,617,617,617,617,196,196,617,
 
 /* block 51 */
-619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196,
-619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196,
-620,620,620,620,620,620,620,621,622,622,622,622,620,620,196,196,
-176,176,176,176,176,176,176,176,176,176,176,176,176,176,623,624,
-624,176,176,176,176,176,176,176,176,176,176,176,624,624,624,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196,
+618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196,
+619,619,619,619,619,619,619,620,621,621,621,621,619,619,196,196,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,622,623,
+623,176,176,176,176,176,176,176,176,176,176,176,623,623,623,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196,
+176,176,176,176,176,176,176,176,176,176,176,176,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 52 */
-625,625,625,625,626,627,627,627,627,627,627,627,627,627,627,627,
+624,624,624,624,625,626,626,626,626,626,626,627,627,626,626,626,
+626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,
 627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,
-627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,
-627,627,627,627,628,629,625,625,625,625,625,629,625,629,626,626,
-626,626,625,629,630,627,627,627,627,627,627,627,627,196,631,631,
+627,627,627,627,628,629,624,624,624,624,624,629,624,629,625,625,
+625,625,624,629,630,627,627,627,627,627,627,627,627,196,631,631,
 632,632,632,632,632,632,632,632,632,632,631,631,633,634,631,631,
 633,635,635,635,635,635,635,635,635,635,635,628,628,628,628,628,
 628,628,628,628,635,635,635,635,635,635,635,635,635,631,631,631,
@@ -3178,51 +3206,51 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 636,636,637,638,638,638,638,638,638,638,638,638,638,638,638,638,
 638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,
 638,637,636,636,636,636,637,637,636,636,639,640,636,636,638,638,
-641,641,641,641,641,641,641,641,641,641,638,638,638,638,638,638,
-642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,
-642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,
-642,642,642,642,642,642,643,644,645,645,644,644,644,645,644,645,
-645,645,646,646,196,196,196,196,196,196,196,196,647,647,647,647,
+641,641,641,641,641,641,641,641,641,641,642,638,638,638,642,642,
+643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,
+643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,
+643,643,643,643,643,643,644,645,646,646,645,645,645,646,645,646,
+646,646,647,647,196,196,196,196,196,196,196,196,648,648,648,648,
 
 /* block 54 */
-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,648,649,649,649,649,649,649,649,649,650,650,650,650,
-650,650,650,650,649,649,651,652,196,196,196,653,653,654,654,654,
-655,655,655,655,655,655,655,655,655,655,196,196,196,648,648,648,
-656,656,656,656,656,656,656,656,656,656,657,657,657,657,657,657,
-657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,
-657,657,657,657,657,657,657,657,658,658,658,659,658,658,660,660,
+649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,
+649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,
+649,649,649,649,650,650,650,650,650,650,650,650,651,651,651,651,
+651,651,651,651,650,650,652,653,196,196,196,654,654,655,655,655,
+656,656,656,656,656,656,656,656,656,656,196,196,196,649,649,649,
+657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658,
+658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
+658,658,658,658,658,658,658,658,659,659,659,660,659,659,661,661,
 
 /* block 55 */
-661,662,663,664,665,666,667,668,669,275,276,196,196,196,196,196,
-670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,
-670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,
-670,670,670,670,670,670,670,670,670,670,670,196,196,670,670,670,
-671,671,671,671,671,671,671,671,196,196,196,196,196,196,196,196,
-672,673,672,674,673,675,675,676,675,676,677,673,676,676,673,673,
-676,678,673,673,673,673,673,673,673,679,680,681,681,675,681,681,
-681,681,682,683,684,680,680,685,686,686,687,196,196,196,196,196,
+662,663,664,665,666,667,668,669,670,275,276,196,196,196,196,196,
+671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+671,671,671,671,671,671,671,671,671,671,671,196,196,671,671,671,
+672,672,672,672,672,672,672,672,196,196,196,196,196,196,196,196,
+673,674,673,675,674,676,677,678,679,680,681,674,680,680,674,674,
+680,682,683,674,674,674,674,674,674,684,685,686,687,688,687,687,
+687,687,689,690,691,692,692,693,694,694,695,196,196,196,196,196,
 
 /* block 56 */
  70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
  70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70,256,256,256,256,256,688,149,149,149,149,
+ 70, 70, 70, 70, 70, 70,256,256,256,256,256,696,149,149,149,149,
 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
-149,149,149,149,149,149,149,149,149,149,149,149,149,689,689,689,
-689,689,150,149,149,149,689,689,689,689,689, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70,690,691, 70, 70, 70,692, 70, 70,
+149,149,149,149,149,149,149,149,149,149,149,149,149,697,697,697,
+697,697,150,149,149,149,697,697,697,697,697, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,698,699, 70, 70, 70,700, 70, 70,
 
 /* block 57 */
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,693, 70,
- 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,695,695,695,695,695,
-695,695,695,695,696,695,695,695,696,695,695,695,695,695,695,695,
-695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,697,
-698,698,189,189,176,176,176,176,176,176,176,176,176,176,176,176,
-189,189,189,624,624,624,624,624,624,624,624,624,624,624,624,624,
-624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,
-624,624,624,624,624,176,176,176,699,176,700,176,176,176,176,176,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,701, 70,
+ 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,149,149,149,149,149,
+149,149,149,149,150,149,149,149,150,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,703,
+704,704,189,189,176,176,176,176,176,176,176,176,176,176,176,176,
+189,189,189,623,623,623,623,623,623,623,623,623,623,623,623,623,
+623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,
+623,623,623,623,623,176,176,176,705,176,706,176,176,176,176,176,
 
 /* block 58 */
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
@@ -3231,12 +3259,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
-701,702, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
+707,708, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
 
 /* block 59 */
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
- 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,703,704, 70, 70,705, 70,
+ 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,709,710, 70, 70,711, 70,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, 65, 66,
@@ -3245,123 +3273,123 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
 
 /* block 60 */
-706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707,
-706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196,
-706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707,
-706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707,
-706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196,
-708,706,708,706,708,706,708,706,196,707,196,707,196,707,196,707,
-706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707,
-709,709,710,710,710,710,711,711,712,712,713,713,714,714,196,196,
+712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,
+712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196,
+712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,
+712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,
+712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196,
+714,712,714,712,714,712,714,712,196,713,196,713,196,713,196,713,
+712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,
+715,715,716,716,716,716,717,717,718,718,719,719,720,720,196,196,
 
 /* block 61 */
-715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716,
-715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716,
-715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716,
-706,706,717,718,717,196,708,717,707,707,719,719,720,201,721,201,
-201,201,717,718,717,196,708,717,722,722,722,722,720,201,201,201,
-706,706,708,723,196,196,708,708,707,707,724,724,196,201,201,201,
-706,706,708,725,708,250,708,708,707,707,726,726,255,201,201,201,
-196,196,717,718,717,196,708,717,727,727,728,728,720,201,201,196,
+721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722,
+721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722,
+721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722,
+712,712,723,724,723,196,714,723,713,713,725,725,726,201,727,201,
+201,201,723,724,723,196,714,723,728,728,728,728,726,201,201,201,
+712,712,714,729,196,196,714,714,713,713,730,730,196,201,201,201,
+712,712,714,731,714,250,714,714,713,713,732,732,255,201,201,201,
+196,196,723,724,723,196,714,723,733,733,734,734,726,201,201,196,
 
 /* block 62 */
-729,729,729,729,729,729,729,729,729,729,729, 51,730,731,732,733,
-734,734,734,734,734,734,735, 43,736,737,738,739,739,740,738,739,
- 43, 43, 43, 43,741, 43, 43,742,743,744,745,746,747,748,749,750,
-751,751,752,752,752, 43, 43, 43, 43, 49, 57, 43,753,754, 43,755,
-756, 43, 43, 43,757,758,759,754,754,753, 43, 43, 43, 43, 43,760,
- 43, 43, 50,761,755, 43, 43, 43, 43, 43,762, 43, 43,763, 43,729,
- 51,764,764,764,764,765,766,767,768,769,770,770,770,770,770,770,
- 54,696,196,196, 54, 54, 54, 54, 54, 54,771,772,773,774,775,695,
+735,735,735,735,735,735,735,735,735,735,735, 51,736,737,738,739,
+740,740,740,740,740,740,741, 43,742,743,744,745,745,746,744,745,
+ 43, 43, 43, 43,747, 43, 43,748,749,750,751,752,753,754,755,756,
+757,757,758,758,758, 43, 43, 43, 43, 49, 57, 43,759,760, 43,761,
+762, 43, 43, 43,763,764,765,760,760,759, 43, 43, 43, 43, 43,766,
+ 43, 43, 50,767,761, 43, 43, 43, 43, 43,768, 43, 43,769, 43,735,
+ 51,770,770,770,770,771,772,773,774,775,776,776,776,776,776,776,
+ 54,777,196,196, 54, 54, 54, 54, 54, 54,778,779,780,781,782,783,
 
 /* block 63 */
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,771,772,773,774,775,196,
-695,695,695,695,695,695,695,695,695,695,695,695,695,196,196,196,
-479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,
-479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,
-479,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,
-777,777,777,777,777,777,777,777,777,777,777,777,777,778,778,778,
-778,777,778,779,778,777,777,189,189,189,189,777,777,777,777,777,
-780,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,778,779,780,781,782,196,
+783,783,783,783,783,783,783,783,783,783,783,783,783,196,196,196,
+477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,
+477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,
+477,477,784,784,784,784,784,784,784,784,784,784,784,784,784,784,
+785,785,785,785,785,785,785,785,785,785,785,785,785,786,786,786,
+786,785,786,787,786,785,785,189,189,189,189,785,785,785,785,785,
+788,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 64 */
-781,781,782,781,781,781,781,782,781,781,783,782,782,782,783,783,
-782,782,782,783,781,782,781,781,784,782,782,782,782,782,781,781,
-781,781,785,781,782,781,786,781,782,787,788,789,782,782,790,783,
-782,782,791,782,783,792,792,792,792,793,781,781,783,783,782,782,
-794,794,794,794,794,782,783,783,795,795,781,794,781,781,796,510,
+789,789,790,789,789,789,789,790,789,789,791,790,790,790,791,791,
+790,790,790,791,789,790,789,789,792,790,790,790,790,790,789,789,
+789,789,793,789,790,789,794,789,790,795,796,797,790,790,798,791,
+790,790,799,790,791,800,800,800,800,801,789,789,791,791,790,790,
+802,802,802,802,802,790,791,791,803,803,789,802,789,789,804,508,
  58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,
-798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,
+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,
+806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,
 
 /* block 65 */
-799,799,799, 65, 66,799,799,799,799, 58,781,781,196,196,196,196,
- 50, 50, 50, 50,800,801,801,801,801,801, 50, 50,802,802,802,802,
- 50,802,802, 50,802,802, 50,802, 45,801,801,802,802,802, 50, 45,
-802,802, 45, 45, 45, 45,802,802, 45, 45, 45, 45,802,802,802,802,
-802,802,802,802,802,802,802,802,802,802,802,802,802,802, 50, 50,
-802,802, 50,802, 50,802,802,802,802,802,802,802, 45,802, 45, 45,
- 45, 45, 45, 45,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+807,807,807, 65, 66,807,807,807,807, 58,789,789,196,196,196,196,
+ 50, 50, 50, 50,808,809,809,809,809,809, 50, 50,810,810,810,810,
+ 50,810,810, 50,810,810, 50,810, 45,809,809,810,810,810, 50, 45,
+810,810, 45, 45, 45, 45,810,810, 45, 45, 45, 45,810,810,810,810,
+810,810,810,810,810,810,810,810,810,810,810,810,810,810, 50, 50,
+810,810, 50,810, 50,810,810,810,810,810,810,810, 45,810, 45, 45,
+ 45, 45, 45, 45,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
 
 /* block 66 */
- 50, 50,803, 50, 50, 50, 50,803,804,804,804,804,804,804, 50, 50,
- 50, 50,805, 53, 50,804, 50, 50, 50, 50, 50, 50, 50, 50,803,804,
-804,804,804, 50,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50,
- 50, 50, 50,804, 50,804, 50, 50, 50, 50, 50, 50,804, 50, 50, 50,
- 50, 50,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50,804,804,804,804,804,804,804,804, 50, 50,804,804,
-804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,
+ 50, 50,811, 50, 50, 50, 50,811,812,812,812,812,812,812, 50, 50,
+ 50, 50,813, 53, 50,812, 50, 50, 50, 50, 50, 50, 50, 50,811,812,
+812,812,812, 50,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50,
+ 50, 50, 50,812, 50,812, 50, 50, 50, 50, 50, 50,812, 50, 50, 50,
+ 50, 50,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50,812,812,812,812,812,812,812,812, 50, 50,812,812,
+812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,
 
 /* block 67 */
-804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, 50,804,
-804,804,804, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50,
- 50, 50,804,804, 50, 50,804, 50,804,804, 50,804, 50, 50, 50, 50,
-804,804,804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804, 50, 50,
-804,804, 50, 50, 50, 50,804,804,804,804,804,804,804,804,804,804,
-804,804,804,804,804,804,804,804,804,804,804,804,804,804, 50, 50,
-804,804,804,804,804, 50,804,804, 50, 50,804,804,804,804,804, 50,
+812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, 50,812,
+812,812,812, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50,812,812, 50, 50,812, 50,812,812, 50,812, 50, 50, 50, 50,
+812,812,812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812, 50, 50,
+812,812, 50, 50, 50, 50,812,812,812,812,812,812,812,812,812,812,
+812,812,812,812,812,812,812,812,812,812,812,812,812,812, 50, 50,
+812,812,812,812,812, 50,812,812, 50, 50,812,812,812,812,812, 50,
 
 /* block 68 */
- 45, 45, 45, 45, 45, 45, 45, 45,806,807,806,807, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, 45,
- 50, 50, 45, 45, 45, 45, 45, 45, 47,809,810, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45,811,811,811,811,811,811,811,811,811,811,
-811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,
-811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,
-811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,
-811,811,811,811,811,811,811,811,811,811,811, 45, 50, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45,814,815,814,815, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45,
+ 50, 50, 45, 45, 45, 45, 45, 45, 47,817,818, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45,819,819,819,819,819,819,819,819,819,819,
+819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
+819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
+819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
+819,819,819,819,819,819,819,819,819,819,819, 45, 50, 45, 45, 45,
 
 /* block 69 */
- 45, 45, 45, 45, 45, 45, 45, 45,812, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45,811, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45,819, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50,802,802, 45,802, 45, 45, 45, 45, 45, 45, 45, 45,
+ 50, 50, 50, 50,810,810, 45,810, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,
-802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50,
- 50, 50,802, 45, 45, 45, 45, 45, 45,808,808,808,808, 47, 47, 47,
-808, 47, 47,808, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45,
+810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50,
+ 50, 50,810, 45, 45, 45, 45, 45, 45,816,816,816,816, 47, 47, 47,
+816, 47, 47,816, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45,
 
 /* block 70 */
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813,813,
-813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813,
-813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,820,
+820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,
+820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,
  58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
  58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
 
 /* block 71 */
- 58, 58, 58, 58, 58, 58, 58, 58,814,814,814,814,814,814,814,814,
-814,814,814,814,814,814,814,814,814,814,814,814,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,815,815,815,815,815,815,815,815,815,815,
-815,815,816,815,815,815,815,815,815,815,815,815,815,815,815,815,
-817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,
-817,817,817,817,817,817,817,817,817,817, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58,821,821,821,821,821,821,821,821,
+821,821,821,821,821,821,821,821,821,821,821,821,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,822,822,822,822,822,822,822,822,822,822,
+822,822,823,822,822,822,822,822,822,822,822,822,822,822,822,822,
+824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
+824,824,824,824,824,824,824,824,824,824, 58, 58, 58, 58, 58, 58,
  58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
 
 /* block 72 */
@@ -3377,132 +3405,132 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 /* block 73 */
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-802,802, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,802,802,
-802,802,802,802,802,802,801, 50, 45, 45, 45, 45,802,802,802,802,
-801, 50, 45, 45, 45, 45,802,802, 45, 45,802,802, 45, 45, 45,802,
-802,802,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45,802, 45,802, 45, 45,802,802,802,802,802,802, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,800,800,818,818, 50,
+810,810, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,810,810,
+810,810,810,810,810,810,809, 50, 45, 45, 45, 45,810,810,810,810,
+809, 50, 45, 45, 45, 45,810,810, 45, 45,810,810, 45, 45, 45,810,
+810,810,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45,810, 45,810, 45, 45,810,810,810,810,810,810, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,808,808,825,825, 50,
 
 /* block 74 */
- 47, 47, 47, 47, 47,819,802,812,812,812,812,812,812,812, 47,812,
-812, 47,812, 45,808,808,812,812, 47,812,812,812,812,820,812,812,
- 47,812, 47, 47,812,812, 47,812,812,812, 47,812,812,812, 47, 47,
-812,812,812,812,812,812,812,812, 47, 47, 47,812,812,812,812,812,
-801,812,801,812,812,812,812,812,808,808,808,808,808,808,808,808,
-808,808,808,808,812,812,812,812,812,812,812,812,812,812,812, 47,
-801,819,819,801,812, 47, 47,812, 47,812,812,812,812,819,819,821,
-812,812,812,812,812,812,812,812,812,812,812, 47,812,812, 47,808,
+ 47, 47, 47, 47, 47,810,810, 45, 45, 45, 45, 45, 45, 45, 47, 45,
+ 45, 47, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45,826, 45, 45,
+ 47, 45, 47, 47, 45, 45, 47, 45, 45, 45, 47, 45, 45, 45, 47, 47,
+ 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45,
+809, 45,809, 45, 45, 45, 45, 45,816,816,816,816,816,816,816,816,
+816,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,
+809,810,810,809, 45, 47, 47, 45, 47, 45, 45, 45, 45,810,810, 50,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 47,816,
 
 /* block 75 */
-812,812,812,812,812,812, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-812,812, 47,808, 47, 47, 47, 47,812, 47,812, 47, 47,812,812,812,
- 47,808,812,812,812,812,812, 47,812,812,808,808,822,812,812,812,
- 47, 47,812,812,812,812,812,812,812,812,812,812,812,808,808,812,
-812,812,812,812,808,808,812,812, 47,812,812,812,812,812,808, 47,
-812, 47,812, 47,808,812,812,812,812,812,812,812,812,812,812,812,
-812,812,812,812,812,812,812,812,812, 47,808,812,812,812,812,812,
- 47, 47,808,808, 47,808,812, 47, 47,820,808,812,812,808,812,812,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 47,816, 47, 47, 47, 47, 45, 47, 45, 47, 47, 45, 45, 45,
+ 47,816, 45, 45, 45, 45, 45, 47, 45, 45,816,816,819, 45, 45, 45,
+ 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45,
+ 45, 45, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45, 45,816, 47,
+ 45, 47, 45, 47,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,816, 45, 45, 45, 45, 45,
+ 47, 47,816,816, 47,816, 45, 47, 47,826,816, 45, 45,816, 45, 45,
 
 /* block 76 */
-812,812, 47,812,812,808, 45, 45, 47, 47,823,823,820,820,812, 47,
-812,812, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45,
- 45, 47, 45, 45, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 47, 45, 45,816, 45, 45, 47, 47,827,827,826,826, 45, 47,
+ 45, 45, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45,
+ 45, 47, 45, 45, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,808, 45,808, 45,
- 45, 45, 45,808,808,808, 45,808, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 47, 47,812,812,812,758,759,758,759,758,759,758,759,
-758,759,758,759,758,759, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,816, 45,816, 45,
+ 45, 45, 45,816,816,816, 45,816, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 47, 47, 45, 45, 45,764,765,764,765,764,765,764,765,
+764,765,764,765,764,765, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
 
 /* block 77 */
  58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 45,808,808,808, 45, 45, 45, 45, 45, 45, 45, 45,
+ 58, 58, 58, 58, 45,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,
- 50, 50, 50,804,804,806,807, 50,804,804, 50,804, 50,804, 50, 50,
- 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50,804,804,804, 50,
- 50, 50,804,804,804,804,806,807,806,807,806,807,806,807,806,807,
+816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,
+ 50, 50, 50,812,812,814,815, 50,812,812, 50,812, 50,812, 50, 50,
+ 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50,812,812,812, 50,
+ 50, 50,812,812,812,812,814,815,814,815,814,815,814,815,814,815,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
 
 /* block 78 */
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
+828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
 
 /* block 79 */
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50,800,800, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50,808,808, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
 
 /* block 80 */
- 50, 50, 50,806,807,806,807,806,807,806,807,806,807,806,807,806,
-807,806,807,806,807,806,807,806,807, 50, 50,804, 50, 50, 50, 50,
-804, 50, 50,804,804,804, 50, 50,804,804,804,804,804,804,804,804,
- 50, 50, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50,
-804,804, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,
-804,804,804, 50,804,804, 50, 50,806,807,806,807, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50,804, 50, 50,804,804, 50, 50,806,807, 50, 50,
+ 50, 50, 50,814,815,814,815,814,815,814,815,814,815,814,815,814,
+815,814,815,814,815,814,815,814,815, 50, 50,812, 50, 50, 50, 50,
+812, 50, 50,812,812,812, 50, 50,812,812,812,812,812,812,812,812,
+ 50, 50, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50,
+812,812, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,
+812,812,812, 50,812,812, 50, 50,814,815,814,815, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50,812, 50, 50,812,812, 50, 50,814,815, 50, 50,
 
 /* block 81 */
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50,
- 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50,804,804, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50,
+ 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,812,812, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804,804,804,
+ 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812,812,812,
 
 /* block 82 */
-804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,
-804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,
-804,804,804, 50, 50, 50,804,804,804,804,804,804,804,804, 50,804,
-804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,
-804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,
-804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50,804, 50,
- 50, 50, 50,804,804,804, 50, 50, 50, 50, 50, 50,804,804,804, 50,
- 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, 50, 50, 50, 50,
+812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,
+812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,
+812,812,812, 50, 50, 50,812,812,812,812,812,812,812,812, 50,812,
+812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,
+812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,
+812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,812, 50,
+ 50, 50, 50,812,812,812, 50, 50, 50, 50, 50, 50,812,812,812, 50,
+ 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, 50, 50, 50, 50,
 
 /* block 83 */
  45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
  50, 50, 50, 50, 50, 45, 45, 50, 50, 50, 50, 50, 50, 45, 45, 45,
-808, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+816, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45,813,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45,820,820, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
 
 /* block 84 */
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45,813, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,825, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,829, 45,
 
 /* block 85 */
-826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,
-826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,
-826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,
-827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,
-827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,
-827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,
- 65, 66,828,829,830,831,832, 65, 66, 65, 66, 65, 66,833,834,835,
-836, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,696,695,837,837,
+830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
+830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
+830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
+831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,
+831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,
+831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,
+ 65, 66,832,833,834,835,836, 65, 66, 65, 66, 65, 66,837,838,839,
+840, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,777,783,841,841,
 
 /* block 86 */
 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,
@@ -3511,598 +3539,598 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,
 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,
 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,
-246,247,246,247,838,839,839,839,839,839,839,246,247,246,247,840,
-840,840,246,247,196,196,196,196,196,841,841,841,842,843,842,842,
+246,247,246,247,842,843,843,843,843,843,843,246,247,246,247,844,
+844,844,246,247,196,196,196,196,196,845,845,845,846,847,846,846,
 
 /* block 87 */
-844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,
-844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,
-844,844,844,844,844,844,196,844,196,196,196,196,196,844,196,196,
-845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,
-845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,
-845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,
-845,845,845,845,845,845,845,845,196,196,196,196,196,196,196,846,
-847,196,196,196,196,196,196,196,196,196,196,196,196,196,196,848,
-
-/* block 88 */
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
-533,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196,
-533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196,
-533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196,
-533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196,
-533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+848,848,848,848,848,848,196,848,196,196,196,196,196,848,196,196,
+849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,
 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,
 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,
+849,849,849,849,849,849,849,849,196,196,196,196,196,196,196,850,
+851,196,196,196,196,196,196,196,196,196,196,196,196,196,196,852,
+
+/* block 88 */
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
+531,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196,
+531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,
+531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,
+531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,
+531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,
+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
 
 /* block 89 */
- 43, 43,850,851,850,851, 43, 43, 43,850,851, 43,850,851, 43, 43,
- 43, 43, 43, 43, 43, 43, 43,852, 43, 43,734, 43,850,851, 43, 43,
-850,851,758,759,758,759,758,759,758,759, 43, 43, 43, 43,754,853,
-854,855, 43, 43, 43, 43, 43, 43, 43, 43,734,734,856, 43, 43, 43,
-734,857,738,858, 43, 43, 43, 43, 43, 43, 43, 43,859, 43,859,859,
- 45, 45, 43,754,754,758,759,758,759,758,759,758,759,734,813,813,
-813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,
-813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,
+ 43, 43,854,855,854,855, 43, 43, 43,854,855, 43,854,855, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43,856, 43, 43,740, 43,854,855, 43, 43,
+854,855,764,765,764,765,764,765,764,765, 43, 43, 43, 43,760,857,
+858,859, 43, 43, 43, 43, 43, 43, 43, 43,740,740,860, 43, 43, 43,
+740,861,744,862, 43, 43, 43, 43, 43, 43, 43, 43,863, 43,863,863,
+ 45, 45, 43,760,760,764,765,764,765,764,765,764,765,740,820,820,
+820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,
+820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,
 
 /* block 90 */
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,196,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,196,196,196,196,196,196,196,196,196,196,196,196,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,196,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 91 */
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
 
 /* block 92 */
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,196,196,196,196,196,196,196,196,196,196,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,
+864,864,864,864,864,864,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-861,861,862,862,861,861,861,861,861,861,861,861,861,861,863,863,
+865,865,866,866,865,865,865,865,865,865,865,865,865,865,867,867,
 
 /* block 93 */
-729,864,865,866,781,867,868,869,870,871,872,873,874,875,874,875,
-876,877, 45,878,876,877,876,877,876,877,876,877,879,880,881,881,
- 45,869,869,869,869,869,869,869,869,869,882,882,882,882,883,883,
-884,885,885,885,885,885,781,886,869,869,869,887,888,889,890,890,
-196,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
+735,868,869,870,789,871,872,873,874,875,876,877,878,879,878,879,
+880,881, 45,882,880,881,880,881,880,881,880,881,883,884,885,885,
+ 45,873,873,873,873,873,873,873,873,873,886,886,886,886,887,887,
+888,889,889,889,889,889,789,890,873,873,873,891,892,893,894,894,
+196,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
 
 /* block 94 */
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,196,196,892,892,893,893,894,894,891,
-895,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,897,898,899,899,896,
-
-/* block 95 */
-196,196,196,196,196,900,900,900,900,900,900,900,900,900,900,900,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,196,196,896,896,897,897,898,898,895,
+899,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
-196,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,
-901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,
-901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,
-901,901,901,901,902,901,901,901,901,901,901,901,901,901,901,901,
-901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,
-
-/* block 96 */
-901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196,
-903,903,904,904,904,904,903,903,903,903,903,903,903,903,903,903,
 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
-890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,
-890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,
-890,890,890,890,890,890,196,196,196,196,196,196,196,196,196,861,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+900,900,900,900,900,900,900,900,900,900,900,901,902,903,903,900,
 
-/* block 97 */
+/* block 95 */
+196,196,196,196,196,904,904,904,904,904,904,904,904,904,904,904,
+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+196,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
-905,905,905,905,905,905,905,905,905,905,905,905,905,906,906,196,
-904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903,
-903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,
-903,903,903,903,903,903,903,903,907,907,907,907,907,907,907,907,
-781, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
-905,905,905,905,905,905,905,905,905,905,905,905,906,906,906,510,
+905,905,905,905,906,905,905,905,905,905,905,905,905,905,905,905,
+905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
 
-/* block 98 */
-904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903,
-903,903,903,903,903,903,903,908,903,908,903,903,903,903,903,903,
-903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,
-903, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
-903,903,903,903,903,903,903,903,903,903,903,903,781,781,781,781,
+/* block 96 */
+905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196,
+907,907,908,908,908,908,907,907,907,907,907,907,907,907,907,907,
+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,
+894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,
+894,894,894,894,894,894,196,196,196,196,196,196,196,196,196,865,
+900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
+
+/* block 97 */
 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
+909,909,909,909,909,909,909,909,909,909,909,909,909,910,910,196,
+908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,911,911,911,911,911,911,911,911,
+789, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,903,
+909,909,909,909,909,909,909,909,909,909,909,909,910,910,910,508,
+
+/* block 98 */
+908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907,
+907,907,907,907,907,907,907,912,907,912,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+907,907,907,907,907,907,907,907,907,907,907,907,789,789,789,789,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,907,
 
 /* block 99 */
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,903,903,903,903,903,903,903,903,
-903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,
-903,510,510,510,510,510,510,781,781,781,781,903,903,903,903,903,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
+913,913,913,913,913,913,913,913,907,907,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,508,508,508,508,508,508,789,789,789,789,907,907,907,907,907,
 
 /* block 100 */
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,781,781,
-903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,
-903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,781,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,789,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,789,
 
 /* block 101 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
 
 /* block 102 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
 
 /* block 103 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,912,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,916,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
 
 /* block 104 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
 
 /* block 105 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,196,196,196,
-913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
-913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
-913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,
-913,913,913,913,913,913,913,196,196,196,196,196,196,196,196,196,
-914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
-914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
-914,914,914,914,914,914,914,914,915,915,915,915,915,915,916,917,
-
-/* block 106 */
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
+915,915,915,915,915,915,915,915,915,915,915,915,915,196,196,196,
+917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,
+917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,
+917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,
+917,917,917,917,917,917,917,196,196,196,196,196,196,196,196,196,
 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
+918,918,918,918,918,918,918,918,919,919,919,919,919,919,920,921,
+
+/* block 106 */
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
 
 /* block 107 */
-918,918,918,918,918,918,918,918,918,918,918,918,919,920,921,921,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-922,922,922,922,922,922,922,922,922,922,918,918,196,196,196,196,
+922,922,922,922,922,922,922,922,922,922,922,922,923,924,925,925,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+926,926,926,926,926,926,926,926,926,926,922,922,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-275,276,275,276,275,276,275,276,275,276,923,924,275,276,275,276,
+275,276,275,276,275,276,275,276,275,276,927,928,275,276,275,276,
 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,
-275,276,275,276,275,276,275,276,275,276,275,276,275,276,925,281,
-283,283,283,926,849,849,849,849,849,849,849,849,927,927,926,928,
+275,276,275,276,275,276,275,276,275,276,275,276,275,276,929,281,
+283,283,283,930,853,853,853,853,853,853,853,853,931,931,930,932,
 
 /* block 108 */
 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,
-275,276,275,276,275,276,275,276,275,276,275,276,929,929,849,849,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,931,931,931,931,931,931,931,931,931,931,
-932,932,933,934,935,935,935,934,196,196,196,196,196,196,196,196,
+275,276,275,276,275,276,275,276,275,276,275,276,933,933,853,853,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,935,935,935,935,935,935,935,935,935,935,
+936,936,937,938,939,939,939,938,196,196,196,196,196,196,196,196,
 
 /* block 109 */
-936,936,936,936,936,936,936,936, 46, 46, 46, 46, 46, 46, 46, 46,
+940,940,940,940,940,940,940,940, 46, 46, 46, 46, 46, 46, 46, 46,
  46, 46, 46, 46, 46, 46, 46,151,151,151,151,151,151,151,151,151,
  46, 46, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  70, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
  65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
-695, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,937, 65, 66,
+783, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,941, 65, 66,
 
 /* block 110 */
- 65, 66, 65, 66, 65, 66, 65, 66,151,938,938, 65, 66,939, 70, 93,
- 65, 66, 65, 66,940, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
- 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,941,942,943,944,941, 70,
-945,946,947,948, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
- 65, 66, 65, 66,949,950,951, 65, 66, 65, 66,952, 65, 66,196,196,
- 65, 66,196, 70,196, 70, 65, 66, 65, 66, 65, 66,953,196,196,196,
+ 65, 66, 65, 66, 65, 66, 65, 66,151,942,942, 65, 66,943, 70, 93,
+ 65, 66, 65, 66,944, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
+ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,945,946,947,948,945, 70,
+949,950,951,952, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,
+ 65, 66, 65, 66,953,954,955, 65, 66, 65, 66,956, 65, 66, 65, 66,
+ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,957,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,695,695,695, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93,
+196,149,783,783,783, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93,
 
 /* block 111 */
-954,954,955,954,954,954,956,954,954,954,954,955,954,954,954,954,
-954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,
-954,954,954,957,957,955,955,957,958,958,958,958,956,196,196,196,
-959,959,959,960,960,960,961,961,962,963,196,196,196,196,196,196,
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,964,964,965,965,966,966,196,196,196,196,196,196,196,196,
-
-/* block 112 */
-967,967,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+958,958,959,958,958,958,960,958,958,958,958,959,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,961,961,959,959,961,962,962,962,962,960,196,196,196,
+963,963,963,964,964,964,965,965,966,967,196,196,196,196,196,196,
 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
-968,968,968,968,967,967,967,967,967,967,967,967,967,967,967,967,
-967,967,967,967,969,970,196,196,196,196,196,196,196,196,971,971,
-972,972,972,972,972,972,972,972,972,972,196,196,196,196,196,196,
-378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,
-378,973,376,974,376,376,376,376,385,385,385,376,385,376,376,374,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,969,969,970,970,196,196,196,196,196,196,196,196,
+
+/* block 112 */
+971,971,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,971,971,971,971,971,971,971,971,971,971,971,971,
+971,971,971,971,973,974,196,196,196,196,196,196,196,196,975,975,
+976,976,976,976,976,976,976,976,976,976,196,196,196,196,196,196,
+376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,
+376,977,374,978,374,374,374,374,383,383,383,374,383,374,374,372,
 
 /* block 113 */
-975,975,975,975,975,975,975,975,975,975,976,976,976,976,976,976,
-976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,
-976,976,976,976,976,976,977,977,977,977,977,978,978,978,979,980,
-981,981,981,981,981,981,981,981,981,981,981,981,981,981,981,981,
-981,981,981,981,981,981,981,982,982,982,982,982,982,982,982,982,
-982,982,983,984,196,196,196,196,196,196,196,196,196,196,196,985,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528,528,528,528,196,196,196,
+979,979,979,979,979,979,979,979,979,979,980,980,980,980,980,980,
+980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,
+980,980,980,980,980,980,981,981,981,981,981,982,982,982,983,984,
+985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,
+985,985,985,985,985,985,985,986,986,986,986,986,986,986,986,986,
+986,986,987,988,196,196,196,196,196,196,196,196,196,196,196,989,
+526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
+526,526,526,526,526,526,526,526,526,526,526,526,526,196,196,196,
 
 /* block 114 */
-986,986,986,987,988,988,988,988,988,988,988,988,988,988,988,988,
-988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,
-988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,
-988,988,988,989,987,987,986,986,986,986,987,987,986,986,987,987,
-990,991,991,991,991,991,991,992,993,993,991,991,991,991,196,994,
-995,995,995,995,995,995,995,995,995,995,196,196,196,196,991,991,
-511,511,511,511,511,521,996,511,511,511,511,511,511,511,511,511,
-522,522,522,522,522,522,522,522,522,522,511,511,511,511,511,196,
+990,990,990,991,992,992,992,992,992,993,993,993,992,992,992,993,
+993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,
+993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,
+993,993,993,994,991,991,990,990,990,990,991,991,990,990,991,991,
+995,996,996,996,996,996,996,997,998,998,996,996,996,996,196,999,
+1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,196,196,996,996,
+509,509,509,509,509,519,1001,509,509,509,509,509,509,509,509,509,
+520,520,520,520,520,520,520,520,520,520,509,509,509,509,509,196,
 
 /* block 115 */
-997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,
-997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,
-997,997,997,997,997,997,997,997,997,998,998,998,998,998,998,999,
-999,998,998,999,999,998,998,196,196,196,196,196,196,196,196,196,
-997,997,997,998,997,997,997,997,997,997,997,997,998,999,196,196,
-1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,1001,1002,1002,1002,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-996,511,511,511,511,511,511,523,523,523,511,520,521,520,511,511,
+1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,
+1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,
+1002,1002,1002,1002,1002,1002,1002,1002,1002,1003,1003,1003,1003,1003,1003,1004,
+1004,1003,1003,1004,1004,1003,1003,196,196,196,196,196,196,196,196,196,
+1002,1002,1002,1003,1002,1002,1002,1002,1002,1002,1002,1002,1003,1004,196,196,
+1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,196,196,1006,1007,1007,1007,
+509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,
+1001,509,509,509,1008,1008,1008,521,521,521,509,518,519,518,509,509,
 
 /* block 116 */
-1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,
-1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,
-1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,
-1004,1003,1004,1004,1004,1005,1005,1004,1004,1005,1003,1005,1005,1003,1004,1006,
-1007,1006,1007,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,1003,1003,1008,1009,1010,
-1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1012,1013,1013,1012,1012,
-1014,1014,1011,1015,1015,1012,1016,196,196,196,196,196,196,196,196,196,
+1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,
+1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,
+1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,
+1010,1009,1010,1010,1010,1011,1011,1010,1010,1011,1009,1011,1011,1009,1010,1012,
+1013,1012,1013,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,1009,1009,1014,1015,1016,
+1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1018,1019,1019,1018,1018,
+1020,1020,1021,1022,1022,1018,1023,196,196,196,196,196,196,196,196,196,
 
 /* block 117 */
-196,533,533,533,533,533,533,196,196,533,533,533,533,533,533,196,
-196,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196,
-533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196,
+196,531,531,531,531,531,531,196,196,531,531,531,531,531,531,196,
+196,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196,
+531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,
  70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
  70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70,1017, 70, 70, 70, 70, 70, 70, 70,938,149,149,149,149,
+ 70, 70, 70,1024, 70, 70, 70, 70, 70, 70, 70,942,149,149,149,149,
  70, 70, 70, 70, 70,256, 70, 70, 70,149, 46, 46,196,196,196,196,
-1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,
+1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
 
 /* block 118 */
-1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,
-1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,
-1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,
-1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,
-1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,
-1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,
-1011,1011,1011,1012,1012,1013,1012,1012,1013,1012,1012,1014,1019,1016,196,196,
-1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,196,196,196,196,196,196,
+1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
+1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
+1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
+1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
+1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,
+1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1021,1021,1021,1021,1021,
+1021,1021,1021,1018,1018,1019,1018,1018,1019,1018,1018,1020,1026,1023,196,196,
+1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,196,196,196,196,196,196,
 
 /* block 119 */
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
 
 /* block 120 */
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
 
 /* block 121 */
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
 
 /* block 122 */
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
 
 /* block 123 */
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
 
 /* block 124 */
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
 
 /* block 125 */
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
 
 /* block 126 */
-1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,
-1022,1022,1022,1022,196,196,196,196,196,196,196,196,196,196,196,196,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,196,196,196,196,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
-532,532,532,532,532,532,532,532,532,532,532,532,196,196,196,196,
+1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,
+1029,1029,1029,1029,196,196,196,196,196,196,196,196,196,196,196,196,
+529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
+529,529,529,529,529,529,529,196,196,196,196,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,196,196,196,196,
 
 /* block 127 */
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
-1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
+1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,
 
 /* block 128 */
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
 
 /* block 129 */
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
 
 /* block 130 */
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910,910,
-1025,910,1025,910,910,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910,
-1025,910,1025,910,910,1025,1025,910,910,910,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,914,
+1032,914,1032,914,914,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,
+1032,914,1032,914,914,1032,1032,914,914,914,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
 
 /* block 131 */
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196,196,196,196,196,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 132 */
-703,703,703,703,703,1026,1027,196,196,196,196,196,196,196,196,196,
-196,196,196,292,292,292,292,292,196,196,196,196,196,305,300,305,
-305,305,305,305,305,305,305,305,305,1028,305,305,305,305,305,305,
-305,305,305,305,305,305,305,297,305,305,305,305,305,297,305,297,
-305,305,297,305,305,297,305,305,305,305,305,305,305,305,305,305,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+709,709,709,709,709,1033,1034,196,196,196,196,196,196,196,196,196,
+196,196,196,292,292,292,292,292,196,196,196,196,196,303,299,303,
+303,303,303,303,303,303,303,303,303,1035,303,303,303,303,303,303,
+303,303,303,303,303,303,303,297,303,303,303,303,303,297,303,297,
+303,303,297,303,303,297,303,303,303,303,303,303,303,303,303,303,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 133 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
-370,370,370,340,340,340,340,340,340,340,340,340,340,340,340,340,
-340,340,340,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+368,368,368,313,313,313,313,313,313,313,313,313,313,313,313,313,
+313,313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 134 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,1029,1029,
-1029,1029,1029,1029,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,1036,1036,
+1036,1036,1036,1036,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 135 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 136 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,1030,1031,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,1037,1038,
+313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
 
 /* block 137 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-340,340,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,340,340,340,340,340,340,340,315,
-1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
-1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
-321,321,1033,321,321,321,321,321,321,321,1029,1029,312,1034,315,315,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,313,313,313,313,313,313,313,313,
+1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,
+1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,
+319,319,1040,319,319,319,319,319,319,319,1036,1036,310,1041,313,313,
 
 /* block 138 */
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1036,
-1037,1037,1038,1039,1037,1038,1038,1040,1041,1037,196,196,196,196,196,196,
-176,176,176,176,176,176,176,176,176,176,176,176,176,176,927,927,
-1037,1042,1042,755,755,1040,1041,1040,1041,1040,1041,1040,1041,1040,1041,1040,
-1041,1043,1044,1043,1044,866,866,1040,1041,1037,1037,1037,1037,755,755,755,
-1045,199,1046,196,199,1047,1038,1038,1042,1048,1049,1048,1049,1048,1049,1050,
-1037,1051,1052,1053,1054,1054,794,196,1051,479,1050,1037,196,196,196,196,
-1029,321,1029,321,1029,340,1029,321,1029,321,1029,321,1029,321,1029,321,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1043,
+1044,1044,1045,1046,1044,1045,1045,1047,1048,1044,196,196,196,196,196,196,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,931,931,
+1044,1049,1049,761,761,1047,1048,1047,1048,1047,1048,1047,1048,1047,1048,1047,
+1048,1050,1051,1050,1051,870,870,1047,1048,1044,1044,1044,1044,761,761,761,
+1052,199,1053,196,199,1054,1045,1045,1049,1055,1056,1055,1056,1055,1056,1057,
+1044,1058,1059,1060,1061,1061,802,196,1058,477,1057,1044,196,196,196,196,
+1036,319,1036,319,1036,338,1036,319,1036,319,1036,319,1036,319,1036,319,
 
 /* block 139 */
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,340,340, 51,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
+319,319,319,319,319,319,319,319,319,319,319,319,319,338,338, 51,
 
 /* block 140 */
-196,1038,1055,1050,479,1050,1037,1056,1048,1049,1037,1052,1045,1057,1046,1058,
-1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1047,199,1054,794,1054,1038,
-1037,1060,1060,1060,1060,1060,1060, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1048,1051,1049,1061,755,
- 46,1062,1062,1062,1062,1062,1062, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1048,794,1049,794,1048,
-1049,1063,1064,1065,1066,897,896,896,896,896,896,896,896,896,896,896,
-898,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+196,1045,1062,1057,477,1057,1044,1063,1055,1056,1044,1059,1052,1064,1053,1065,
+1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1054,199,1061,802,1061,1045,
+1044,1067,1067,1067,1067,1067,1067, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1055,1058,1056,1068,761,
+ 46,1069,1069,1069,1069,1069,1069, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1055,802,1056,802,1055,
+1056,1070,1071,1072,1073,901,900,900,900,900,900,900,900,900,900,900,
+902,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
 
 /* block 141 */
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,1067,1067,
-902,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,
-901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196,
-196,196,901,901,901,901,901,901,196,196,901,901,901,901,901,901,
-196,196,901,901,901,901,901,901,196,196,901,901,901,196,196,196,
-479,479,794, 46,781,479,479,196,781,794,794,794,794,781,781,196,
-765,765,765,765,765,765,765,765,765,1068,1068,1068,781,781,1032,1032,
+900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
+900,900,900,900,900,900,900,900,900,900,900,900,900,900,1074,1074,
+906,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
+905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196,
+196,196,905,905,905,905,905,905,196,196,905,905,905,905,905,905,
+196,196,905,905,905,905,905,905,196,196,905,905,905,196,196,196,
+477,477,802, 46,789,477,477,196,789,802,802,802,802,789,789,196,
+771,771,771,771,771,771,771,771,771,1075,1075,1075,789,789,1039,1039,
 
 /* block 142 */
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,196,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,196,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 143 */
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,
-1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196,196,196,196,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,
+1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,196,196,196,
 
 /* block 144 */
-1070,1071,1072,196,196,196,196,1073,1073,1073,1073,1073,1073,1073,1073,1073,
-1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,
-1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,
-1073,1073,1073,1073,196,196,196,1074,1074,1074,1074,1074,1074,1074,1074,1074,
-1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,
-1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,
-1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,
-1075,1075,1075,1075,1075,1076,1076,1076,1076,1077,1077,1077,1077,1077,1077,1077,
+1077,1078,1079,196,196,196,196,1080,1080,1080,1080,1080,1080,1080,1080,1080,
+1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,
+1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,
+1080,1080,1080,1080,196,196,196,1081,1081,1081,1081,1081,1081,1081,1081,1081,
+1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,
+1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,
+1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,
+1082,1082,1082,1082,1082,1083,1083,1083,1083,1084,1084,1084,1084,1084,1084,1084,
 
 /* block 145 */
-1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1076,1076,1077,1078,1078,196,
-781,781,781,781,781,781,781,781,781,781,781,781,781,196,196,196,
-1077,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1083,1083,1084,1085,1085,196,
+789,789,789,789,789,789,789,789,789,789,789,789,789,196,196,196,
+1084,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,189,196,196,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,189,196,196,
 
 /* block 146 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -4115,97 +4143,97 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 147 */
-1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,
-1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,196,196,196,
-1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,
-1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,
-1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,
-1080,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1081,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,
-1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,196,196,196,196,
-
-/* block 148 */
-1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,
-1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,
-1084,1084,1084,1084,196,196,196,196,196,196,196,196,196,1083,1083,1083,
-1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,
-1085,1086,1085,1085,1085,1085,1085,1085,1085,1085,1086,196,196,196,196,196,
+1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,
+1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,196,196,196,
+1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,
 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,
 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,
-1087,1087,1087,1087,1087,1087,1088,1088,1088,1088,1088,196,196,196,196,196,
+1087,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1088,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,
+1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,196,196,196,
+
+/* block 148 */
+1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,
+1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,
+1091,1091,1091,1091,196,196,196,196,196,196,196,196,196,1090,1090,1090,
+1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,
+1092,1093,1092,1092,1092,1092,1092,1092,1092,1092,1093,196,196,196,196,196,
+1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,
+1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,
+1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,196,196,196,196,196,
 
 /* block 149 */
-1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,
-1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,1090,
-1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,
-1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,
-1091,1091,1091,1091,196,196,196,196,1091,1091,1091,1091,1091,1091,1091,1091,
-1092,1093,1093,1093,1093,1093,196,196,196,196,196,196,196,196,196,196,
+1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,
+1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,196,1097,
+1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,
+1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,
+1098,1098,1098,1098,196,196,196,196,1098,1098,1098,1098,1098,1098,1098,1098,
+1099,1100,1100,1100,1100,1100,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 150 */
-1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,
-1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,
-1094,1094,1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,1095,1095,1095,
-1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,
-1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,
-1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,
-1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,
-1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,
-
-/* block 151 */
-1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,
-1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,196,196,
-1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,196,196,196,196,196,196,
-1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,
-1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,
-1099,1099,1099,1099,196,196,196,196,1100,1100,1100,1100,1100,1100,1100,1100,
-1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,
-1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,196,196,196,196,
-
-/* block 152 */
 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,
 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,
-1101,1101,1101,1101,1101,1101,1101,1101,196,196,196,196,196,196,196,196,
+1101,1101,1101,1101,1101,1101,1101,1101,1102,1102,1102,1102,1102,1102,1102,1102,
 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,
 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,
-1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,
-1102,1102,1102,1102,196,196,196,196,196,196,196,196,196,196,196,1103,
-1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104,
+1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,
+1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,
+1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,
 
-/* block 153 */
-1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104,
-1104,1104,1104,196,1104,1104,196,1105,1105,1105,1105,1105,1105,1105,1105,1105,
-1105,1105,196,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,
-1105,1105,196,1105,1105,1105,1105,1105,1105,1105,196,1105,1105,196,196,196,
-1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,
+/* block 151 */
+1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,
+1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,196,
+1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,196,196,196,196,196,196,
 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,
 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,
-1106,1106,1106,1106,196,196,196,196,196,196,196,196,196,196,196,196,
+1106,1106,1106,1106,196,196,196,196,1107,1107,1107,1107,1107,1107,1107,1107,
+1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
+1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196,
+
+/* block 152 */
+1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,
+1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,
+1108,1108,1108,1108,1108,1108,1108,1108,196,196,196,196,196,196,196,196,
+1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,
+1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,
+1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,
+1109,1109,1109,1109,196,196,196,196,196,196,196,196,196,196,196,1110,
+1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111,
+
+/* block 153 */
+1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111,
+1111,1111,1111,196,1111,1111,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,
+1112,1112,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,
+1112,1112,196,1112,1112,1112,1112,1112,1112,1112,196,1112,1112,196,196,196,
+1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,
+1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,
+1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,
+1113,1113,1113,1113,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 154 */
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
 
 /* block 155 */
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196,
-1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,
-1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196,196,
-1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,
+1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,
+1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,196,
+1114,1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 156 */
-149,1108,1108,149,149,149,196,149,149,149,149,149,149,149,149,149,
+149,1115,1115,149,149,149,196,149,149,149,149,149,149,149,149,149,
 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
 149,196,149,149,149,149,149,149,149,149,149,196,196,196,196,196,
@@ -4215,79 +4243,79 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 157 */
-1109,1109,1109,1109,1109,1109,297,297,1109,297,1109,1109,1109,1109,1109,1109,
-1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,
-1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,
-1109,1109,1109,1109,1109,1109,297,1109,1109,297,297,297,1109,297,297,1109,
-1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,
-1110,1110,1110,1110,1110,1110,297,1111,1112,1112,1112,1112,1112,1112,1112,1112,
-1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,
-1113,1113,1113,1113,1113,1113,1113,1114,1114,1115,1115,1115,1115,1115,1115,1115,
+1116,1116,1116,1116,1116,1116,297,297,1116,297,1116,1116,1116,1116,1116,1116,
+1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,
+1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,
+1116,1116,1116,1116,1116,1116,297,1116,1116,297,297,297,1116,297,297,1116,
+1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,
+1117,1117,1117,1117,1117,1117,297,1118,1119,1119,1119,1119,1119,1119,1119,1119,
+1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,
+1120,1120,1120,1120,1120,1120,1120,1121,1121,1122,1122,1122,1122,1122,1122,1122,
 
 /* block 158 */
-1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,
-1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,297,
-297,297,297,297,297,297,297,1117,1117,1117,1117,1117,1117,1117,1117,1117,
+1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,
+1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297,
+297,297,297,297,297,297,297,1124,1124,1124,1124,1124,1124,1124,1124,1124,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,
-1118,1118,1118,297,1118,1118,297,297,297,297,297,1119,1119,1119,1119,1119,
+1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,
+1125,1125,1125,297,1125,1125,297,297,297,297,297,1126,1126,1126,1126,1126,
 
 /* block 159 */
-1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,
-1120,1120,1120,1120,1120,1120,1121,1121,1121,1121,1121,1121,297,297,297,1122,
-1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,
-1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297,297,297,297,297,1124,
-297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,
+1127,1127,1127,1127,1127,1127,1128,1128,1128,1128,1128,1128,297,297,297,1129,
+1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,
+1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,297,297,297,297,297,1131,
+1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,
+1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
 /* block 160 */
-1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,
-1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,
-1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,
-1126,1126,1126,1126,1126,1126,1126,1126,297,297,297,297,1127,1127,1126,1126,
-1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,
-297,297,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,
-1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,
-1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,
+1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,
+1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,
+1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,
+1134,1134,1134,1134,1134,1134,1134,1134,297,297,297,297,1135,1135,1134,1134,
+1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,
+297,297,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,
+1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,
+1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,
 
 /* block 161 */
-1128,1129,1129,1129,297,1129,1129,297,297,297,297,297,1129,1129,1129,1129,
-1128,1128,1128,1128,297,1128,1128,1128,297,1128,1128,1128,1128,1128,1128,1128,
-1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,
-1128,1128,1128,1128,1128,1128,297,297,1130,1130,1130,297,297,297,297,1131,
-1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297,297,
-1133,1133,1133,1133,1133,1133,1134,1134,1133,297,297,297,297,297,297,297,
-1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,
-1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1136,1136,1137,
+1136,1137,1137,1137,297,1137,1137,297,297,297,297,297,1137,1137,1137,1137,
+1136,1136,1136,1136,297,1136,1136,1136,297,1136,1136,1136,1136,1136,1136,1136,
+1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,
+1136,1136,1136,1136,1136,1136,297,297,1138,1138,1138,297,297,297,297,1139,
+1140,1140,1140,1140,1140,1140,1140,1140,1140,297,297,297,297,297,297,297,
+1141,1141,1141,1141,1141,1141,1142,1142,1141,297,297,297,297,297,297,297,
+1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,
+1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1144,1144,1145,
 
 /* block 162 */
-1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,
-1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1139,1139,1139,
+1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,
+1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1147,1147,1147,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-1140,1140,1140,1140,1140,1140,1140,1140,1141,1140,1140,1140,1140,1140,1140,1140,
-1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,
-1140,1140,1140,1140,1140,1142,1142,297,297,297,297,1143,1143,1143,1143,1143,
-1144,1144,1145,1144,1144,1144,1146,297,297,297,297,297,297,297,297,297,
+1148,1148,1148,1148,1148,1148,1148,1148,1149,1148,1148,1148,1148,1148,1148,1148,
+1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,
+1148,1148,1148,1148,1148,1150,1150,297,297,297,297,1151,1151,1151,1151,1151,
+1152,1152,1153,1152,1152,1152,1154,297,297,297,297,297,297,297,297,297,
 
 /* block 163 */
-1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,
-1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,
-1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,
-1147,1147,1147,1147,1147,1147,297,297,297,1148,1149,1149,1149,1149,1149,1149,
-1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,
-1150,1150,1150,1150,1150,1150,297,297,1151,1151,1151,1151,1151,1151,1151,1151,
-1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,
-1152,1152,1152,297,297,297,297,297,1153,1153,1153,1153,1153,1153,1153,1153,
+1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,
+1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,
+1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,
+1155,1155,1155,1155,1155,1155,297,297,297,1156,1157,1157,1157,1157,1157,1157,
+1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,
+1158,1158,1158,1158,1158,1158,297,297,1159,1159,1159,1159,1159,1159,1159,1159,
+1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,
+1160,1160,1160,297,297,297,297,297,1161,1161,1161,1161,1161,1161,1161,1161,
 
 /* block 164 */
-1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,
-1154,1154,297,297,297,297,297,297,297,1155,1155,1155,1155,297,297,297,
-297,297,297,297,297,297,297,297,297,1156,1156,1156,1156,1156,1156,1156,
+1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,
+1162,1162,297,297,297,297,297,297,297,1163,1163,1163,1163,297,297,297,
+297,297,297,297,297,297,297,297,297,1164,1164,1164,1164,1164,1164,1164,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
@@ -4295,37 +4323,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
 /* block 165 */
-1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,
-1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,
-1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,
-1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,
-1157,1157,1157,1157,1157,1157,1157,1157,1157,297,297,297,297,297,297,297,
+1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,
+1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,
+1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,
+1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,
+1165,1165,1165,1165,1165,1165,1165,1165,1165,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
 /* block 166 */
-1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,
-1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,
-1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,
-1158,1158,1158,297,297,297,297,297,297,297,297,297,297,297,297,297,
-1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,
-1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,
-1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,
-1159,1159,1159,297,297,297,297,297,297,297,1160,1160,1160,1160,1160,1160,
+1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,
+1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,
+1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,
+1166,1166,1166,297,297,297,297,297,297,297,297,297,297,297,297,297,
+1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,
+1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,
+1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,
+1167,1167,1167,297,297,297,297,297,297,297,1168,1168,1168,1168,1168,1168,
 
 /* block 167 */
-1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,
-1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,
-1161,1161,1162,1162,1163,1163,1163,1163,340,340,340,340,340,340,340,340,
-1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,340,340,340,340,340,340,
-1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1166,1166,1166,1166,1167,1166,
-1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,
-1168,1168,1168,1168,1168,1168,297,297,297,1169,1170,1171,1171,1171,1172,1173,
-1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,
+1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,
+1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,
+1169,1169,1170,1170,1171,1171,1171,1171,338,338,338,338,338,338,338,338,
+1172,1172,1172,1172,1172,1172,1172,1172,1172,1172,338,338,338,338,338,338,
+1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1174,1174,1174,1174,1175,1174,
+1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,
+1176,1176,1176,1176,1176,1176,297,297,297,1177,1178,1179,1179,1179,1180,1181,
+1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,
 
 /* block 168 */
-1174,1174,1174,1174,1174,1174,297,297,297,297,297,297,297,297,1175,1175,
+1182,1182,1182,1182,1182,1182,297,297,297,297,297,297,297,297,1183,1183,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
@@ -4341,184 +4369,184 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,
-1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,297,
+1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,
+1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,297,
 
 /* block 170 */
-1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,
-1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,
-1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,297,1178,1178,1179,297,297,
-1177,1177,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-340,340,321,321,321,340,340,340,340,340,340,340,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,316,333,333,333,
+1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,
+1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,
+1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,297,1186,1186,1187,297,297,
+1185,1185,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+338,338,319,319,319,1188,319,319,338,338,338,338,338,338,338,338,
+1189,313,313,313,313,313,313,313,313,338,338,338,338,338,338,338,
+338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
+338,338,338,338,338,338,338,338,338,338,324,314,314,331,331,331,
 
 /* block 171 */
-1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,
-1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1181,1181,1181,
-1181,1181,1181,1181,1181,1181,1181,1180,297,297,297,297,297,297,297,297,
-1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,
-1182,1182,1182,1182,1182,1182,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,
-1183,1184,1184,1184,1184,1185,1185,1185,1185,1185,340,340,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,
+1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,
+1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1191,1191,1191,
+1191,1191,1191,1191,1191,1191,1191,1190,297,297,297,297,297,297,297,297,
+1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,
+1192,1192,1192,1192,1192,1192,1193,1193,1193,1193,1193,1193,1193,1193,1193,1193,
+1193,1194,1194,1194,1194,1195,1195,1195,1195,1195,338,338,338,338,338,338,
+338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
+1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,
 
 /* block 172 */
-1186,1186,1187,1187,1187,1187,1188,1188,1188,1188,297,297,297,297,297,297,
+1196,1196,1197,1197,1197,1197,1198,1198,1198,1198,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,
-1189,1189,1189,1189,1189,1190,1190,1190,1190,1190,1190,1190,297,297,297,297,
+1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,
+1199,1199,1199,1199,1199,1200,1200,1200,1200,1200,1200,1200,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,
-1191,1191,1191,1191,1191,1191,1191,297,297,297,297,297,297,297,297,297,
+1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,
+1201,1201,1201,1201,1201,1201,1201,297,297,297,297,297,297,297,297,297,
 
 /* block 173 */
-1192,1193,1192,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,
-1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,
-1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,
-1194,1194,1194,1194,1194,1194,1194,1194,1193,1193,1193,1193,1193,1193,1193,1193,
-1193,1193,1193,1193,1193,1193,1195,1196,1196,1197,1197,1197,1197,1197,196,196,
-196,196,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,
-1198,1198,1198,1198,1198,1198,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,
-1195,1194,1194,1193,1193,1194,196,196,196,196,196,196,196,196,196,1200,
+1202,1203,1202,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,
+1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,
+1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,
+1204,1204,1204,1204,1204,1204,1204,1204,1203,1203,1203,1203,1203,1203,1203,1203,
+1203,1203,1203,1203,1203,1203,1205,1206,1206,1207,1207,1207,1207,1207,196,196,
+196,196,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,
+1208,1208,1208,1208,1208,1208,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,
+1205,1204,1204,1203,1203,1204,196,196,196,196,196,196,196,196,196,1210,
 
 /* block 174 */
-1201,1201,1202,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,
-1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,
-1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,
-1202,1202,1202,1201,1201,1201,1201,1202,1202,1204,1205,1206,1206,1207,1208,1208,
-1208,1208,1201,196,196,196,196,196,196,196,196,196,196,1207,196,196,
-1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,
-1209,1209,1209,1209,1209,1209,1209,1209,1209,196,196,196,196,196,196,196,
-1210,1210,1210,1210,1210,1210,1210,1210,1210,1210,196,196,196,196,196,196,
+1211,1211,1212,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,
+1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,
+1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,
+1212,1212,1212,1211,1211,1211,1211,1212,1212,1214,1215,1216,1216,1217,1218,1218,
+1218,1218,1211,196,196,196,196,196,196,196,196,196,196,1217,196,196,
+1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,
+1219,1219,1219,1219,1219,1219,1219,1219,1219,196,196,196,196,196,196,196,
+1220,1220,1220,1220,1220,1220,1220,1220,1220,1220,196,196,196,196,196,196,
 
 /* block 175 */
-1211,1211,1211,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,
-1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,
-1212,1212,1212,1212,1212,1212,1212,1211,1211,1211,1211,1211,1213,1211,1211,1211,
-1211,1211,1211,1214,1214,196,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,
-1216,1217,1217,1217,1212,1213,1213,1212,196,196,196,196,196,196,196,196,
-1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,
-1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,
-1218,1218,1218,1219,1220,1220,1218,196,196,196,196,196,196,196,196,196,
+1221,1221,1221,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,
+1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,
+1222,1222,1222,1222,1222,1222,1222,1221,1221,1221,1221,1221,1223,1221,1221,1221,
+1221,1221,1221,1224,1224,196,1225,1225,1225,1225,1225,1225,1225,1225,1225,1225,
+1226,1227,1227,1227,1222,1223,1223,1222,196,196,196,196,196,196,196,196,
+1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,
+1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,
+1228,1228,1228,1229,1230,1230,1228,196,196,196,196,196,196,196,196,196,
 
 /* block 176 */
-1221,1221,1222,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,
-1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,
-1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,
-1223,1223,1223,1222,1222,1222,1221,1221,1221,1221,1221,1221,1221,1221,1221,1222,
-1224,1223,1225,1225,1223,1226,1226,1227,1227,1228,1229,1229,1229,1226,1222,1221,
-1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1223,1227,1223,1227,1226,1226,
-196,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,
-1231,1231,1231,1231,1231,196,196,196,196,196,196,196,196,196,196,196,
+1231,1231,1232,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,
+1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,
+1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,
+1233,1233,1233,1232,1232,1232,1231,1231,1231,1231,1231,1231,1231,1231,1231,1232,
+1234,1233,1235,1235,1233,1236,1236,1237,1237,1238,1239,1239,1239,1236,1232,1231,
+1240,1240,1240,1240,1240,1240,1240,1240,1240,1240,1233,1237,1233,1237,1236,1236,
+196,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,
+1241,1241,1241,1241,1241,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 177 */
-1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,
-1232,1232,196,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,
-1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1233,1233,1233,1234,
-1234,1234,1233,1233,1234,1235,1236,1237,1238,1238,1239,1238,1238,1240,1234,1232,
-1232,1234,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,
+1242,1242,196,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,
+1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1243,1243,1243,1244,
+1244,1244,1243,1243,1244,1245,1246,1247,1248,1248,1249,1248,1248,1250,1244,1242,
+1242,1244,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 178 */
-1241,1241,1241,1241,1241,1241,1241,196,1241,196,1241,1241,1241,1241,196,1241,
-1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,196,1241,
-1241,1241,1241,1241,1241,1241,1241,1241,1241,1242,196,196,196,196,196,196,
-1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,
-1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,
-1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1244,
-1245,1245,1245,1244,1244,1244,1244,1244,1244,1246,1247,196,196,196,196,196,
-1248,1248,1248,1248,1248,1248,1248,1248,1248,1248,196,196,196,196,196,196,
+1251,1251,1251,1251,1251,1251,1251,196,1251,196,1251,1251,1251,1251,196,1251,
+1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,196,1251,
+1251,1251,1251,1251,1251,1251,1251,1251,1251,1252,196,196,196,196,196,196,
+1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,
+1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,
+1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1254,
+1255,1255,1255,1254,1254,1254,1254,1254,1254,1256,1257,196,196,196,196,196,
+1258,1258,1258,1258,1258,1258,1258,1258,1258,1258,196,196,196,196,196,196,
 
 /* block 179 */
-1249,1250,1251,1252,196,1253,1253,1253,1253,1253,1253,1253,1253,196,196,1253,
-1253,196,196,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,
-1253,1253,1253,1253,1253,1253,1253,1253,1253,196,1253,1253,1253,1253,1253,1253,
-1253,196,1253,1253,196,1253,1253,1253,1253,1253,196,1254,1255,1253,1256,1251,
-1249,1251,1251,1251,1251,196,196,1251,1251,196,196,1251,1251,1257,196,196,
-1253,196,196,196,196,196,196,1256,196,196,196,196,196,1258,1253,1253,
-1253,1253,1251,1251,196,196,1259,1259,1259,1259,1259,1259,1259,196,196,196,
-1259,1259,1259,1259,1259,196,196,196,196,196,196,196,196,196,196,196,
+1259,1260,1261,1262,196,1263,1263,1263,1263,1263,1263,1263,1263,196,196,1263,
+1263,196,196,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,
+1263,1263,1263,1263,1263,1263,1263,1263,1263,196,1263,1263,1263,1263,1263,1263,
+1263,196,1263,1263,196,1263,1263,1263,1263,1263,196,1264,1265,1263,1266,1261,
+1259,1261,1261,1261,1261,196,196,1261,1261,196,196,1261,1261,1267,196,196,
+1263,196,196,196,196,196,196,1266,196,196,196,196,196,1268,1263,1263,
+1263,1263,1261,1261,196,196,1269,1269,1269,1269,1269,1269,1269,196,196,196,
+1269,1269,1269,1269,1269,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 180 */
-1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,196,1260,196,196,1260,196,
-1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,
-1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,
-1260,1260,1260,1260,1260,1260,196,1260,1261,1262,1262,1263,1263,1263,1263,1263,
-1263,196,1261,196,196,1261,196,1261,1261,1261,1262,196,1262,1262,1264,1265,
-1264,1266,1267,1268,1269,1269,196,1270,1270,196,196,196,196,196,196,196,
-196,1271,1271,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,196,1270,196,196,1270,196,
+1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,
+1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,
+1270,1270,1270,1270,1270,1270,196,1271,1272,1273,1273,1274,1274,1274,1274,1274,
+1274,196,1272,196,196,1272,196,1272,1272,1272,1273,196,1273,1273,1275,1276,
+1275,1277,1278,1279,1280,1280,196,1281,1281,196,196,196,196,196,196,196,
+196,1282,1282,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 181 */
-1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,
-1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,
-1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,
-1272,1272,1272,1272,1272,1273,1273,1273,1274,1274,1274,1274,1274,1274,1274,1274,
-1273,1273,1275,1274,1274,1273,1276,1272,1272,1272,1272,1277,1277,1278,1279,1279,
-1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1278,1278,196,1279,1281,1272,
-1272,1272,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,
+1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,
+1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,
+1283,1283,1283,1283,1283,1284,1284,1284,1285,1285,1285,1285,1285,1285,1285,1285,
+1284,1284,1286,1285,1285,1284,1287,1283,1283,1283,1283,1288,1288,1289,1290,1290,
+1291,1291,1291,1291,1291,1291,1291,1291,1291,1291,1289,1289,196,1290,1292,1283,
+1283,1283,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 182 */
-1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,
-1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,
-1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,
-1283,1284,1284,1285,1285,1285,1285,1285,1285,1284,1285,1284,1284,1283,1284,1285,
-1285,1284,1286,1287,1282,1282,1288,1282,196,196,196,196,196,196,196,196,
-1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,196,196,196,196,196,196,
+1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,
+1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,
+1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,
+1294,1295,1295,1296,1296,1296,1296,1296,1296,1295,1296,1295,1295,1294,1295,1296,
+1296,1295,1297,1298,1293,1293,1299,1293,196,196,196,196,196,196,196,196,
+1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 183 */
-1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,
-1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,
-1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1291,
-1292,1292,1293,1293,1293,1293,196,196,1292,1292,1292,1292,1293,1293,1292,1294,
-1295,1296,1297,1297,1298,1298,1299,1299,1299,1297,1297,1297,1297,1297,1297,1297,
-1297,1297,1297,1297,1297,1297,1297,1297,1290,1290,1290,1290,1293,1293,196,196,
+1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,
+1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,
+1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1302,
+1303,1303,1304,1304,1304,1304,196,196,1303,1303,1303,1303,1304,1304,1303,1305,
+1306,1307,1308,1308,1309,1309,1310,1310,1310,1308,1308,1308,1308,1308,1308,1308,
+1308,1308,1308,1308,1308,1308,1308,1308,1301,1301,1301,1301,1304,1304,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 184 */
-1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,
-1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,
-1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,
-1301,1301,1301,1302,1302,1302,1302,1302,1302,1302,1302,1301,1301,1302,1301,1303,
-1302,1304,1304,1305,1300,196,196,196,196,196,196,196,196,196,196,196,
-1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,196,196,196,196,196,196,
-581,581,581,581,581,581,581,581,581,581,581,581,581,196,196,196,
+1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,
+1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,
+1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,
+1312,1312,1312,1313,1313,1313,1313,1313,1313,1313,1313,1312,1312,1313,1312,1314,
+1313,1315,1315,1316,1311,196,196,196,196,196,196,196,196,196,196,196,
+1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,196,196,196,196,196,196,
+580,580,580,580,580,580,580,580,580,580,580,580,580,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 185 */
-1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,
-1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,
-1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1308,1309,1308,1309,1309,
-1308,1308,1308,1308,1308,1308,1310,1311,1307,1312,196,196,196,196,196,196,
-1313,1313,1313,1313,1313,1313,1313,1313,1313,1313,196,196,196,196,196,196,
-522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,
-522,522,522,522,196,196,196,196,196,196,196,196,196,196,196,196,
+1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,
+1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,
+1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1319,1320,1319,1320,1320,
+1319,1319,1319,1319,1319,1319,1321,1322,1318,1323,196,196,196,196,196,196,
+1324,1324,1324,1324,1324,1324,1324,1324,1324,1324,196,196,196,196,196,196,
+520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,
+520,520,520,520,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 186 */
-1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,
-1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,196,196,1315,1316,1315,
-1317,1317,1315,1315,1315,1315,1316,1315,1315,1315,1315,1318,196,196,196,196,
-1319,1319,1319,1319,1319,1319,1319,1319,1319,1319,1320,1320,1321,1321,1321,1322,
-1314,1314,1314,1314,1314,1314,1314,196,196,196,196,196,196,196,196,196,
+1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,
+1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,196,196,1326,1327,1326,
+1328,1328,1326,1326,1326,1326,1327,1326,1326,1326,1326,1329,196,196,196,196,
+1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1331,1331,1332,1332,1332,1333,
+1325,1325,1325,1325,1325,1325,1325,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 187 */
-1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,
-1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,
-1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1324,1324,1324,1325,
-1325,1325,1325,1325,1325,1325,1325,1325,1324,1326,1327,1328,196,196,196,196,
+1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,
+1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,
+1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1335,1335,1335,1336,
+1336,1336,1336,1336,1336,1336,1336,1336,1335,1337,1338,1339,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -4527,61 +4555,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 /* block 188 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,
-1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,
-1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,
-1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,
-1331,1331,1331,1331,1331,1331,1331,1331,1331,1331,1332,1332,1332,1332,1332,1332,
-1332,1332,1332,196,196,196,196,196,196,196,196,196,196,196,196,1333,
+1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,
+1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,
+1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,
+1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,
+1342,1342,1342,1342,1342,1342,1342,1342,1342,1342,1343,1343,1343,1343,1343,1343,
+1343,1343,1343,196,196,196,196,196,196,196,196,196,196,196,196,1344,
 
 /* block 189 */
-1334,1334,1334,1334,1334,1334,1334,196,196,1334,196,196,1334,1334,1334,1334,
-1334,1334,1334,1334,196,1334,1334,196,1334,1334,1334,1334,1334,1334,1334,1334,
-1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,
-1335,1336,1336,1336,1336,1336,196,1336,1336,196,196,1337,1337,1338,1339,1340,
-1336,1340,1336,1341,1342,1343,1342,196,196,196,196,196,196,196,196,196,
-1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,196,196,196,196,196,196,
+1345,1345,1345,1345,1345,1345,1345,196,196,1345,196,196,1345,1345,1345,1345,
+1345,1345,1345,1345,196,1345,1345,196,1345,1345,1345,1345,1345,1345,1345,1345,
+1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,
+1346,1347,1347,1347,1347,1347,196,1347,1347,196,196,1348,1348,1349,1350,1351,
+1347,1351,1347,1352,1353,1354,1353,196,196,196,196,196,196,196,196,196,
+1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 190 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1345,1345,1345,1345,1345,1345,1345,1345,196,196,1345,1345,1345,1345,1345,1345,
-1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,
-1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,
-1345,1346,1346,1346,1347,1347,1347,1347,196,196,1347,1347,1346,1346,1346,1346,
-1348,1345,1349,1345,1346,196,196,196,196,196,196,196,196,196,196,196,
+1356,1356,1356,1356,1356,1356,1356,1356,196,196,1356,1356,1356,1356,1356,1356,
+1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,
+1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,
+1356,1357,1357,1357,1358,1358,1358,1358,196,196,1358,1358,1357,1357,1357,1357,
+1359,1356,1360,1356,1357,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 191 */
-1350,1351,1351,1351,1351,1351,1351,1352,1352,1351,1351,1350,1350,1350,1350,1350,
-1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,
-1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,
-1350,1350,1350,1353,1354,1351,1351,1351,1351,1355,1356,1351,1351,1351,1351,1357,
-1357,1357,1358,1358,1357,1357,1357,1354,196,196,196,196,196,196,196,196,
-1359,1360,1360,1360,1360,1360,1360,1361,1361,1360,1360,1360,1359,1359,1359,1359,
-1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,
-1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,
+1361,1362,1362,1362,1362,1362,1362,1363,1363,1362,1362,1361,1361,1361,1361,1361,
+1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,
+1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,
+1361,1361,1361,1364,1365,1362,1362,1362,1362,1366,1367,1362,1362,1362,1362,1368,
+1368,1368,1369,1369,1368,1368,1368,1365,196,196,196,196,196,196,196,196,
+1370,1371,1371,1371,1371,1371,1371,1372,1372,1371,1371,1371,1370,1370,1370,1370,
+1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,
+1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,
 
 /* block 192 */
-1359,1359,1359,1359,1362,1362,1362,1362,1362,1362,1360,1360,1360,1360,1360,1360,
-1360,1360,1360,1360,1360,1360,1360,1361,1363,1364,1365,1366,1366,1359,1365,1365,
-1365,1367,1367,196,196,196,196,196,196,196,196,196,196,196,196,196,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,
-1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,
-1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,
-1368,1368,1368,1368,1368,1368,1368,1368,1368,196,196,196,196,196,196,196,
+1370,1370,1370,1370,1373,1373,1373,1373,1373,1373,1371,1371,1371,1371,1371,1371,
+1371,1371,1371,1371,1371,1371,1371,1372,1374,1375,1376,1377,1377,1378,1376,1376,
+1376,1379,1379,196,196,196,196,196,196,196,196,196,196,196,196,196,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,
+1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,
+1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,
+1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196,196,196,196,196,
 
 /* block 193 */
-385,385,385,385,385,385,385,385,385,385,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+383,383,383,383,383,383,383,383,383,383,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1231,1232,1231,1231,1231,1232,1231,1232,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 194 */
@@ -4589,49 +4617,49 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,
-1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,
-1369,1370,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1371,1371,1371,1371,1371,1371,1371,1371,1371,1371,196,196,196,196,196,196,
+1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,
+1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,
+1381,1382,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,196,196,196,196,196,196,
 
 /* block 195 */
-1372,1372,1372,1372,1372,1372,1372,1372,1372,196,1372,1372,1372,1372,1372,1372,
-1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,
-1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1373,
-1374,1374,1374,1374,1374,1374,1374,196,1374,1374,1374,1374,1374,1374,1373,1375,
-1372,1376,1376,1377,1378,1378,196,196,196,196,196,196,196,196,196,196,
-1379,1379,1379,1379,1379,1379,1379,1379,1379,1379,1380,1380,1380,1380,1380,1380,
-1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196,
-1381,1382,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,
+1384,1384,1384,1384,1384,1384,1384,1384,1384,196,1384,1384,1384,1384,1384,1384,
+1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,
+1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1385,
+1386,1386,1386,1386,1386,1386,1386,196,1386,1386,1386,1386,1386,1386,1385,1387,
+1384,1388,1388,1389,1390,1390,196,196,196,196,196,196,196,196,196,196,
+1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,1392,1392,1392,1392,1392,1392,
+1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,196,196,196,
+1393,1394,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,
 
 /* block 196 */
-1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,
-196,196,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,
-1384,1384,1384,1384,1384,1384,1384,1384,196,1385,1384,1384,1384,1384,1384,1384,
-1384,1385,1384,1384,1385,1384,1384,196,196,196,196,196,196,196,196,196,
+1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,
+196,196,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,
+1396,1396,1396,1396,1396,1396,1396,1396,196,1397,1396,1396,1396,1396,1396,1396,
+1396,1397,1396,1396,1397,1396,1396,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 197 */
-1386,1386,1386,1386,1386,1386,1386,196,1386,1386,196,1386,1386,1386,1386,1386,
-1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,
-1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,
-1386,1387,1387,1387,1387,1387,1387,196,196,196,1387,196,1387,1387,196,1387,
-1387,1387,1388,1387,1389,1389,1390,1387,196,196,196,196,196,196,196,196,
-1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,196,196,196,196,196,196,
-1392,1392,1392,1392,1392,1392,196,1392,1392,196,1392,1392,1392,1392,1392,1392,
-1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,
+1398,1398,1398,1398,1398,1398,1398,196,1398,1398,196,1398,1398,1398,1398,1398,
+1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,
+1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,
+1398,1399,1399,1399,1399,1399,1399,196,196,196,1399,196,1399,1399,196,1399,
+1399,1399,1400,1399,1401,1401,1402,1399,196,196,196,196,196,196,196,196,
+1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,196,196,196,196,196,196,
+1404,1404,1404,1404,1404,1404,196,1404,1404,196,1404,1404,1404,1404,1404,1404,
+1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,
 
 /* block 198 */
-1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1393,1393,1393,1393,1393,196,
-1394,1394,196,1393,1393,1394,1393,1395,1392,196,196,196,196,196,196,196,
-1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1405,1405,1405,1405,1405,196,
+1406,1406,196,1405,1405,1406,1405,1407,1404,196,196,196,196,196,196,196,
+1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,196,196,196,196,196,196,
+1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,
+1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,
+1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,1409,1409,196,196,196,196,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 199 */
@@ -4641,16 +4669,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,
-1397,1397,1397,1398,1398,1399,1399,1400,1400,196,196,196,196,196,196,196,
+1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,
+1412,1412,1412,1413,1413,1414,1414,1415,1415,196,196,196,196,196,196,196,
 
 /* block 200 */
-1401,1401,1402,1403,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,
-1404,196,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,
-1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,
-1404,1404,1404,1404,1403,1403,1401,1401,1401,1401,1401,196,196,196,1403,1403,
-1401,1405,1406,1407,1407,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,
-1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,196,196,196,196,196,
+1416,1416,1417,1418,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,
+1419,196,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,
+1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,
+1419,1419,1419,1419,1418,1418,1416,1416,1416,1416,1416,196,196,196,1418,1418,
+1416,1420,1421,1422,1422,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,
+1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
@@ -4658,25 +4686,25 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
-435,435,1411,435,1411,437,437,437,437,437,437,437,437,438,438,438,
-438,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-437,437,196,196,196,196,196,196,196,196,196,196,196,196,196,1412,
+918,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,
+433,433,1426,433,1426,435,435,435,435,435,435,435,435,436,436,436,
+436,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,
+435,435,196,196,196,196,196,196,196,196,196,196,196,196,196,1427,
 
 /* block 202 */
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
 
 /* block 203 */
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,196,196,196,196,196,196,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -4685,137 +4713,137 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 204 */
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,
-1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,196,
-1415,1415,1415,1415,1415,196,196,196,196,196,196,196,196,196,196,196,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,
+1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196,
+1430,1430,1430,1430,1430,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 205 */
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,
-1413,1413,1413,1413,196,196,196,196,196,196,196,196,196,196,196,196,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
+1428,1428,1428,1428,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 206 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,
-1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,
-1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,
-1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,
-1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,
-1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,
-1416,1417,1417,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+1431,1432,1432,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 207 */
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
 
 /* block 208 */
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,
-1420,1418,1418,1418,1418,1418,1418,1421,1421,1421,1421,1421,1421,1421,1421,1421,
-1421,1421,1421,1421,1421,1421,196,196,196,196,196,196,196,196,196,196,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,
+1435,1433,1433,1433,1433,1433,1433,1436,1436,1436,1436,1436,1436,1436,1436,1436,
+1436,1436,1436,1436,1436,1436,196,196,196,196,196,196,196,196,196,196,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
 
 /* block 209 */
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,
-1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,196,196,196,196,196,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
+1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196,196,196,196,
 
 /* block 210 */
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
 
 /* block 211 */
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,
-1422,1422,1422,1422,1422,1422,1422,196,196,196,196,196,196,196,196,196,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,
+1437,1437,1437,1437,1437,1437,1437,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 212 */
-1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,
-1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1424,1424,
-1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,1425,1425,1424,1424,1426,
-1427,1427,1427,1427,1427,1427,1427,1427,1427,1427,196,196,196,196,196,196,
+1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,
+1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1439,1439,
+1439,1439,1439,1439,1439,1439,1439,1439,1439,1439,1440,1440,1440,1439,1439,1441,
+1442,1442,1442,1442,1442,1442,1442,1442,1442,1442,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 213 */
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
 
 /* block 214 */
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,
-930,930,930,930,930,930,930,930,930,196,196,196,196,196,196,196,
-1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,
-1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196,
-1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196,196,196,196,1430,1430,
-1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,196,196,196,196,196,196,196,
+1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,
+1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,196,
+1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,196,196,196,1445,1445,
+1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,
 
 /* block 215 */
-1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
-1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
-1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,
-1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,196,
-1432,1432,1432,1432,1432,1432,1432,1432,1432,1432,196,196,196,196,196,196,
-1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,
-1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196,
-1434,1434,1434,1434,1434,1435,196,196,196,196,196,196,196,196,196,196,
+1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,
+1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,
+1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,
+1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,196,
+1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,196,196,196,196,196,196,
+1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,
+1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,196,196,
+1449,1449,1449,1449,1449,1450,196,196,196,196,196,196,196,196,196,196,
 
 /* block 216 */
-1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,
-1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,
-1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,
-1437,1437,1437,1437,1437,1437,1437,1438,1438,1439,1440,1440,1441,1441,1441,1441,
-1442,1442,1443,1443,1438,1441,196,196,196,196,196,196,196,196,196,196,
-1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,1445,1445,1445,1445,1445,
-1445,1445,196,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,
-1436,1436,1436,1436,1436,1436,1436,1436,196,196,196,196,196,1436,1436,1436,
+1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,
+1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,
+1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,
+1452,1452,1452,1452,1452,1452,1452,1453,1453,1454,1455,1455,1456,1456,1456,1456,
+1457,1457,1458,1458,1453,1456,196,196,196,196,196,196,196,196,196,196,
+1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,1460,1460,1460,1460,1460,
+1460,1460,196,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,
+1451,1451,1451,1451,1451,1451,1451,1451,196,196,196,196,196,1451,1451,1451,
 
 /* block 217 */
-1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,
+1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -4829,94 +4857,84 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1446,1446,1446,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,
-1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,
-1447,1447,1447,1448,1447,1447,1447,1448,1448,1448,1448,1449,1449,1450,1451,1451,
-1452,1452,1452,1452,1452,1452,1452,1452,1452,1452,196,196,196,196,196,196,
+1461,1461,1461,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,
+1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,
+1462,1462,1462,1463,1462,1462,1462,1463,1463,1463,1463,1464,1464,1465,1466,1466,
+1467,1467,1467,1467,1467,1467,1467,1467,1467,1467,196,196,196,196,196,196,
 
 /* block 219 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,
-1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,
-1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,
-1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,
+1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,
+1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,
+1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
+1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
 
 /* block 220 */
-1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,
-1455,1455,1455,1455,1455,1455,1455,1456,1457,1458,1458,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
+1470,1470,1470,1470,1470,1470,1470,1471,1472,1473,1473,196,196,196,196,196,
+1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,
+1474,1474,1474,1474,1474,1474,1474,1474,1474,196,196,1475,1475,1475,1475,1475,
+1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,
+1475,1475,1475,1475,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 221 */
-1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,
-1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,
-1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,
-1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,
-1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,196,196,196,1460,
-1459,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,
-1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,
-1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,
+1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,
+1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,
+1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,
+1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,
+1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,196,196,196,196,1477,
+1476,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,
+1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,
+1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,
 
 /* block 222 */
-1461,1461,1461,1461,1461,1461,1461,1461,196,196,196,196,196,196,196,1462,
-1462,1462,1462,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,
+1478,1478,1478,1478,1478,1478,1478,1478,196,196,196,196,196,196,196,1479,
+1479,1479,1479,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1464,1465,1466,867,1467,196,196,196,196,196,196,196,196,196,196,196,
-1468,1468,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+1481,1482,1483,871,1484,196,196,196,196,196,196,196,196,196,196,196,
+1485,1485,1486,1486,873,873,873,196,196,196,196,196,196,196,196,196,
 
 /* block 223 */
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
 
 /* block 224 */
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,
-1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196,196,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
 
 /* block 225 */
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-
-/* block 226 */
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,
-1470,1470,1470,1470,1470,1470,196,196,196,196,196,196,196,196,196,196,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,
+1488,1488,1488,1488,1488,1488,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1470,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1488,
 
-/* block 227 */
-1469,1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+/* block 226 */
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -4924,6 +4942,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
+/* block 227 */
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,
+1487,1487,1487,196,196,196,196,196,196,196,196,196,196,196,196,196,
+
 /* block 228 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -4932,72 +4960,72 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1471,1471,1471,1471,196,1471,1471,1471,1471,1471,1471,1471,196,1471,1471,196,
+1489,1489,1489,1489,196,1489,1489,1489,1489,1489,1489,1489,196,1489,1489,196,
 
 /* block 229 */
-896,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
+900,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
 
 /* block 230 */
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
 
 /* block 231 */
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
-896,896,896,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,891,196,196,196,196,196,196,196,196,196,196,196,196,196,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,
+900,900,900,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,895,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-891,891,891,196,196,896,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,896,896,896,896,196,196,196,196,196,196,196,196,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
+895,895,895,196,196,900,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,900,900,900,900,196,196,196,196,196,196,196,196,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
 
 /* block 232 */
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
 
 /* block 233 */
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,
-1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,196,196,196,196,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,
+1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,196,196,
 
 /* block 234 */
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,
 
 /* block 235 */
-1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196,196,196,
-1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,1474,1475,1476,1477,
-1478,1478,1478,1478,196,196,196,196,196,196,196,196,196,196,196,196,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,196,196,
+1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,1492,1493,1494,1495,
+1496,1496,1496,1496,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5005,34 +5033,34 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 236 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
 
 /* block 237 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,789,789,196,196,196,
 
 /* block 238 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,196,196,196,196,196,196,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+802,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 239 */
 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
@@ -5040,66 +5068,66 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196,
 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
 176,176,176,176,176,176,176,196,196,196,196,196,196,196,196,196,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
 
 /* block 240 */
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,196,196,196,196,196,196,196,196,196,196,196,196,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 241 */
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
 
 /* block 242 */
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,196,196,196,196,196,196,196,196,196,196,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,196,196,196,196,196,196,196,196,196,196,
 
 /* block 243 */
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,196,196,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,1480,1480,176,176,176,510,510,510,1481,1481,1481,
-1481,1481,1481, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,196,196,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,1498,1498,176,176,176,508,508,508,1499,1499,1499,
+1499,1499,1499, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176,
 
 /* block 244 */
-176,176,176,510,510,176,176,176,176,176,176,176,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,176,176,176,176,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,781,781,196,196,196,196,196,
+176,176,176,508,508,176,176,176,176,176,176,176,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,176,176,176,176,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,789,789,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 245 */
-1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,
-1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,
-1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,
-1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,
-1077,1077,1482,1482,1482,1077,196,196,196,196,196,196,196,196,196,196,
+1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,
+1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,
+1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,
+1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,
+1084,1084,1500,1500,1500,1084,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5109,125 +5137,125 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196,
+911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196,
+911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 247 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,196,196,196,196,196,196,196,196,196,
-904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
-904,904,907,907,907,907,907,907,907,196,196,196,196,196,196,196,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,196,196,196,196,196,196,196,196,196,
+908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,
+908,908,911,911,911,911,911,911,911,196,196,196,196,196,196,196,
 
 /* block 248 */
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783,
-783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783,
-783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783,
-783,783,783,783,783,196,795,795,783,783,783,783,783,783,783,783,
-783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,
+791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791,
+791,791,791,791,791,196,803,803,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
 
 /* block 249 */
-782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783,
-783,783,783,783,783,783,783,783,783,783,783,783,782,196,782,782,
-196,196,782,196,196,782,782,196,196,782,782,782,782,196,782,782,
-782,782,782,782,782,782,783,783,783,783,196,783,196,783,795,795,
-783,783,783,783,196,783,783,783,783,783,783,783,783,783,783,783,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783,
-783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783,
+790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791,
+791,791,791,791,791,791,791,791,791,791,791,791,790,196,790,790,
+196,196,790,196,196,790,790,196,196,790,790,790,790,196,790,790,
+790,790,790,790,790,790,791,791,791,791,196,791,196,791,803,803,
+791,791,791,791,196,791,791,791,791,791,791,791,791,791,791,791,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,
+791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,
 
 /* block 250 */
-783,783,783,783,782,782,196,782,782,782,782,196,196,782,782,782,
-782,782,782,782,782,196,782,782,782,782,782,782,782,196,783,783,
-783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783,
-783,783,783,783,783,783,783,783,782,782,196,782,782,782,782,196,
-782,782,782,782,782,196,782,196,196,196,782,782,782,782,782,782,
-782,196,783,783,783,783,783,783,783,783,795,795,783,783,783,783,
-783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
+791,791,791,791,790,790,196,790,790,790,790,196,196,790,790,790,
+790,790,790,790,790,196,790,790,790,790,790,790,790,196,791,791,
+791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,791,791,790,790,196,790,790,790,790,196,
+790,790,790,790,790,196,790,196,196,196,790,790,790,790,790,790,
+790,196,791,791,791,791,791,791,791,791,803,803,791,791,791,791,
+791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
 
 /* block 251 */
-782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795,
-783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783,
-783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783,
-783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783,
-783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783,
+790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803,
+791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,
+791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791,
+791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791,
 
 /* block 252 */
-783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783,
-783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795,
-783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
+791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791,
+791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803,
+791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
 
 /* block 253 */
-782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783,
-783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783,
-783,783,783,783,783,783,196,196,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,1483,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
-783,783,783,783,783,783,783,783,783,783,783,1483,783,783,783,783,
-783,783,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,1483,783,783,783,783,
+790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,
+791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,196,196,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,1501,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,791,791,791,791,791,1501,791,791,791,791,
+791,791,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,1501,791,791,791,791,
 
 /* block 254 */
-783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
-783,783,783,783,783,1483,783,783,783,783,783,783,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,1483,783,783,783,783,783,783,783,783,783,783,
-783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,1483,
-783,783,783,783,783,783,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,1483,
-783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
+791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,791,1501,791,791,791,791,791,791,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,1501,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,1501,
+791,791,791,791,791,791,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,1501,
+791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
 
 /* block 255 */
-783,783,783,783,783,783,783,783,783,1483,783,783,783,783,783,783,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,1483,783,783,783,783,783,783,
-783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
-783,783,783,1483,783,783,783,783,783,783,782,783,196,196,1484,1484,
-1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,
-1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,
-1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,
+791,791,791,791,791,791,791,791,791,1501,791,791,791,791,791,791,
+790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
+790,790,790,790,790,790,790,790,790,1501,791,791,791,791,791,791,
+791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,1501,791,791,791,791,791,791,790,791,196,196,1502,1502,
+1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,
+1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,
+1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,
 
 /* block 256 */
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
-1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
+1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
 
 /* block 257 */
-1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,
-1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,
-1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,
-1486,1486,1486,1486,1486,1486,1486,1485,1485,1485,1485,1486,1486,1486,1486,1486,
-1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,
-1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,
-1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1485,1485,1485,
-1485,1485,1485,1485,1485,1486,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,
+1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
+1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
+1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
+1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,1503,1504,1504,1504,1504,1504,
+1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
+1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
+1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,
+1503,1503,1503,1503,1503,1504,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,
 
 /* block 258 */
-1485,1485,1485,1485,1486,1485,1485,1487,1488,1487,1487,1489,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,1486,1486,1486,1486,1486,
-196,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,
+1503,1503,1503,1503,1504,1503,1503,1505,1506,1505,1505,1507,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,1504,1504,1504,1504,1504,
+196,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5236,7 +5264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 
 /* block 259 */
  70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 93, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,196,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,196,
 196,196,196,196,196, 70, 70, 70, 70, 70, 70,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5245,17 +5273,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 260 */
-1490,1490,1490,1490,1490,1490,1490,196,1490,1490,1490,1490,1490,1490,1490,1490,
-1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,1490,1490,1490,1490,1490,
-1490,1490,196,1490,1490,196,1490,1490,1490,1490,1490,196,196,196,196,196,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,1491,1491,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,1491,929,929,929,929,929,196,196,
+1508,1508,1508,1508,1508,1508,1508,196,1508,1508,1508,1508,1508,1508,1508,1508,
+1508,1508,1508,1508,1508,1508,1508,1508,1508,196,196,1508,1508,1508,1508,1508,
+1508,1508,196,1508,1508,196,1508,1508,1508,1508,1508,196,196,196,196,196,
+933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,
+933,933,933,933,933,933,933,933,933,933,933,933,1509,1509,933,933,
+933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,
+933,933,933,933,933,933,933,933,1509,933,933,933,933,933,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 261 */
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,849,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,853,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5265,24 +5293,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 262 */
-1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,
-1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,
-1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,196,196,196,
-1493,1493,1493,1493,1493,1493,1493,1494,1494,1494,1494,1494,1495,1495,196,196,
-1496,1496,1496,1496,1496,1496,1496,1496,1496,1496,196,196,196,196,1492,1497,
+1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,
+1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,
+1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,196,196,196,
+1511,1511,1511,1511,1511,1511,1511,1512,1512,1512,1512,1512,1513,1513,196,196,
+1514,1514,1514,1514,1514,1514,1514,1514,1514,1514,196,196,196,196,1510,1515,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 263 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,
-1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1499,196,
+1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,
+1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1517,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,
-1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,
-1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1501,1501,1501,1501,
-1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,196,196,196,196,196,1503,
+1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,
+1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,
+1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1519,1519,1519,1519,
+1520,1520,1520,1520,1520,1520,1520,1520,1520,1520,196,196,196,196,196,1521,
 
 /* block 264 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5290,9 +5318,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,
-1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1505,1506,1506,1506,1506,
-1507,1507,1507,1507,1507,1507,1507,1507,1507,1507,196,196,196,196,196,196,
+1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,
+1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1523,1524,1524,1524,1524,
+1525,1525,1525,1525,1525,1525,1525,1525,1525,1525,196,196,196,196,196,196,
 
 /* block 265 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5300,51 +5328,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,
-1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1509,1510,
-1508,1511,1511,1511,1511,1511,1511,1511,1511,1511,1511,196,196,196,196,1512,
+1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,
+1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1527,1528,
+1526,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,196,196,196,196,1530,
 
 /* block 266 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-533,533,533,533,533,533,533,196,533,533,533,533,196,533,533,196,
-533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,196,
+1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,
+1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,196,
+1531,1531,1531,1532,1531,1531,1532,1531,1531,1531,1531,1531,1531,1531,1532,1532,
+1531,1531,1531,1531,1531,1532,196,196,196,196,196,196,196,196,1531,1533,
 
 /* block 267 */
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+531,531,531,531,531,531,531,196,531,531,531,531,196,531,531,196,
+531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,196,
 
 /* block 268 */
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,
-1513,1513,1513,1513,1513,297,297,1514,1514,1514,1514,1514,1514,1514,1514,1514,
-1515,1515,1515,1515,1515,1515,1515,297,297,297,297,297,297,297,297,297,
-297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
 
 /* block 269 */
-1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,
-1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,
-1516,1516,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,
-1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,
-1517,1517,1517,1517,1518,1518,1518,1519,1520,1520,1520,1521,297,297,297,297,
-1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,297,297,297,297,1523,1523,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+1534,1534,1534,1534,1534,297,297,1535,1535,1535,1535,1535,1535,1535,1535,1535,
+1536,1536,1536,1536,1536,1536,1536,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
 /* block 270 */
+1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,
+1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,
+1537,1537,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,
+1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,
+1538,1538,1538,1538,1539,1539,1539,1540,1541,1541,1541,1542,297,297,297,297,
+1543,1543,1543,1543,1543,1543,1543,1543,1543,1543,297,297,297,297,1544,1544,
+297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+
+/* block 271 */
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
@@ -5354,7 +5392,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
-/* block 271 */
+/* block 272 */
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
@@ -5362,351 +5400,331 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
-340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,
+338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,
 
-/* block 272 */
-1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,
-1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,
-1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524,1524,1524,
-1526,1524,1524,1524,1524,340,340,340,340,340,340,340,340,340,340,340,
+/* block 273 */
+1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,
+1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,
+1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,1545,1545,
+1547,1545,1545,1545,1545,338,338,338,338,338,338,338,338,338,338,338,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
-/* block 273 */
-340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,
-1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,
-1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524,
-1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+/* block 274 */
+338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,
+1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,
+1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,
+1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,338,338,
+338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
 
-/* block 274 */
-1527,1527,1527,1527,340,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,
-1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,
-340,1527,1527,340,1527,340,340,1527,340,1527,1527,1527,1527,1527,1527,1527,
-1527,1527,1527,340,1527,1527,1527,1527,340,1527,340,1527,340,340,340,340,
-340,340,1527,340,340,340,340,1527,340,1527,340,1527,340,1527,1527,1527,
-340,1527,1527,340,1527,340,340,1527,340,1527,340,1527,340,1527,340,1527,
-340,1527,1527,340,1527,340,340,1527,1527,1527,1527,340,1527,1527,1527,1527,
-1527,1527,1527,340,1527,1527,1527,1527,340,1527,1527,1527,1527,340,1527,340,
-
 /* block 275 */
-1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527,
-1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340,
-340,1527,1527,1527,340,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527,
-1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
-309,309,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+1548,1548,1548,1548,338,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,
+1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,
+338,1548,1548,338,1548,338,338,1548,338,1548,1548,1548,1548,1548,1548,1548,
+1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,1548,338,338,338,338,
+338,338,1548,338,338,338,338,1548,338,1548,338,1548,338,1548,1548,1548,
+338,1548,1548,338,1548,338,338,1548,338,1548,338,1548,338,1548,338,1548,
+338,1548,1548,338,1548,338,338,1548,1548,1548,1548,338,1548,1548,1548,1548,
+1548,1548,1548,338,1548,1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,
 
 /* block 276 */
-1528,1528,1528,1528,1529,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
+1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548,
+1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338,
+338,1548,1548,1548,338,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548,
+1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338,
+338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
+338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
+338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
+307,307,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
 
 /* block 277 */
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,
-1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1529,
-1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
+789,789,789,789,1549,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
 
 /* block 278 */
-814,814,814,814,814,814,814,814,814,814,814, 58, 58,1528,1528,1528,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1528,
-1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,
-1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,510,510,
-1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,
-1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,781,781,1528,1528,1528,1528,
-1532,1532,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1532,1532,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,
+1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1549,
+1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
 
 /* block 279 */
-1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,1533,510,
-510,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,1528,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
-1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,
+821,821,821,821,821,821,821,821,821,821,821, 58, 58,789,789,789,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,
+1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,
+1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,508,508,
+1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,
+1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,789,789,789,789,789,789,
+1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,
 
 /* block 280 */
-1535,1533,1536,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-510,510,510,510,510,510,510,510,510,510,1533,510,510,510,510,510,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1533,
-510,510,1533,1533,1533,1533,1533,1536,1533,1533,1533,510,1530,1530,1530,1530,
-510,510,510,510,510,510,510,510,510,1530,1530,1530,1530,1530,1530,1530,
-1537,1537,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
+1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,1553,508,
+508,1553,1553,1553,1553,1553,1553,1553,1553,1553,1553,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,789,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,
+1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,
 
 /* block 281 */
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
+1555,1553,1556,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+508,508,508,508,508,508,508,508,508,508,1553,508,508,508,508,508,
+508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,1553,
+508,508,1553,1553,1553,1553,1553,1556,1553,1553,1553,508,1550,1550,1550,1550,
+508,508,508,508,508,508,508,508,508,1550,1550,1550,1550,1550,1550,1550,
+1557,1557,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
 
 /* block 282 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,785,1528,1528,785,785,785,785,785,785,785,785,785,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,785,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1529,1529,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
 
 /* block 283 */
-1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1528,1528,785,785,1528,785,785,785,1528,1528,785,785,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1538,1538,1538,1529,1529,1538,1529,1529,1538,1539,1539,785,785,1529,
-1529,1529,1529,1529,785,785,785,785,785,785,785,785,785,785,785,785,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1528,1528,785,1529,785,1528,785,1529,1529,1529,1540,1540,1540,1540,1540,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,793,789,789,793,793,793,793,793,793,793,793,793,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,1549,1549,
 
 /* block 284 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,
-1529,785,1538,1538,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,
-1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,
-1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529,1529,1538,1529,1529,1529,
+1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,789,789,793,793,789,793,793,793,789,789,793,793,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1558,1558,1558,1549,1549,1558,1549,1549,1558,1559,1559,793,793,1549,
+1549,1549,1549,1549,793,793,793,793,793,793,793,793,793,793,793,793,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,789,789,793,1549,793,789,793,1549,1549,1549,1560,1560,1560,1560,1560,
 
 /* block 285 */
-1529,1538,1538,1538,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1538,
-1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1528,1529,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,
+1549,793,1558,1558,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,
+1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,
+1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,1549,1558,1549,1549,1549,
 
 /* block 286 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,781,781,
-781,781,781,781,781,781,1528,1528,1528,785,785,1529,1529,1529,1529,1528,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,1528,1528,785,
-785,1528,1528,785,1539,1539,785,785,785,785,1538,1528,1528,1528,1528,1528,
+1549,1558,1558,1558,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1558,
+1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,789,1549,
 
 /* block 287 */
-1528,1528,1528,1528,1528,1528,1528,785,1528,1528,785,785,785,785,1528,1528,
-1539,1528,1528,1528,1528,1538,1538,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1529,785,1528,1528,785,1528,1528,1528,1528,1528,1528,1528,
-1528,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,785,1528,1528,1528,
-1528,1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,785,785,785,1528,
-1528,785,1528,785,1528,1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785,
-1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785,1529,1529,1529,1529,1529,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,789,789,
+789,789,789,789,789,789,789,789,789,793,793,1549,1549,1549,1549,789,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,789,789,789,789,789,789,789,793,
+793,789,789,793,1559,1559,793,793,793,793,1558,789,789,789,789,789,
 
 /* block 288 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1538,1538,1538,1538,1538,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
+789,789,789,789,789,789,789,793,789,789,793,793,793,793,789,789,
+1559,789,789,789,789,1558,1558,789,789,789,789,789,789,789,789,789,
+789,789,789,789,1549,793,789,789,793,789,789,789,789,789,789,789,
+789,793,793,789,789,789,789,789,789,789,789,789,793,789,789,789,
+789,789,793,793,793,789,789,789,789,789,789,789,789,789,789,789,
+789,793,793,793,789,789,789,789,789,789,789,789,793,793,793,789,
+789,793,789,793,789,789,789,789,793,789,789,789,789,789,789,793,
+789,789,789,793,789,789,789,789,789,789,793,1549,1549,1549,1549,1549,
 
 /* block 289 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1538,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,785,1538,785,785,785,
-1529,1529,1529,1528,1528,1529,1529,1529,1530,1530,1530,1530,1529,1529,1529,1529,
-785,785,785,785,785,785,1528,1528,1528,785,1528,1529,1529,1530,1530,1530,
-785,1528,1528,785,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1558,1558,1558,1558,1558,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
 
 /* block 290 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,1528,1528,1528,1530,1530,1530,1530,1528,1528,1528,1528,1528,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1558,1549,1549,1549,1549,1549,789,789,789,789,789,793,1558,793,793,793,
+1549,1549,1549,789,789,1549,1549,1549,1549,1550,1550,1550,1549,1549,1549,1549,
+793,793,793,793,793,793,789,789,789,793,789,1549,1549,1550,1550,1550,
+793,789,789,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,
 
 /* block 291 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,
-1529,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,
+1549,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
 
 /* block 292 */
-781,781,781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530,
-781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
+789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
 
 /* block 293 */
-781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,1530,1530,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,
-1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
+789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,
+789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+802,802,802,802,802,802,802,802,802,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
 
 /* block 294 */
-781,781,781,781,781,781,781,781,781,781,781,781,1538,1529,1529,1538,
-1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,
-1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,781,1538,1538,1538,1529,
-1529,1529,1529,1529,1529,1529,781,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,
+789,789,789,789,789,789,789,789,789,789,789,789,1558,1549,1549,1558,
+1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,
+1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,789,1558,1558,1558,1549,
+1549,1549,1549,1549,1549,1549,789,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,
 
 /* block 295 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1541,1541,1541,1541,1529,1538,1538,1529,1538,1538,1529,1538,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538,
-1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1561,1561,1561,1561,1549,1558,1558,1549,1558,1558,1549,1558,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,
+1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
 
 /* block 296 */
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,
-1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,
 
 /* block 297 */
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,
-1529,1529,1529,1538,1538,1538,1529,1530,1530,1530,1530,1530,1530,1530,1529,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1529,
-1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1530,
-1538,1538,1538,1538,1538,1538,1538,1538,1538,1530,1530,1530,1530,1530,1530,1530,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,
+1549,1549,1549,1558,1558,1558,1549,1550,1549,1550,1550,1550,1550,1549,1549,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1549,
+1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,1549,
+1558,1558,1558,1558,1558,1558,1558,1558,1558,1550,1550,1550,1550,1550,1550,1550,
 
 /* block 298 */
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,196,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
-1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,196,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,196,196,196,196,196,
 
 /* block 299 */
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,
-1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1032,1032,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,
+1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1039,1039,
 
 /* block 300 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
 /* block 301 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,196,196,196,196,196,196,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
 
 /* block 302 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
 
 /* block 303 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
 
 /* block 304 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-
-/* block 305 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
-/* block 306 */
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,
-1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196,
+/* block 305 */
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,
+1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5714,7 +5732,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 
-/* block 307 */
+/* block 306 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
@@ -5722,77 +5740,77 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,1032,1032,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,1039,1039,
+
+/* block 307 */
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
 
 /* block 308 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,196,196,196,196,196,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,
+914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,196,
 
 /* block 309 */
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+771,776,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,
+1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,
+1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,
+1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,
+1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,
+1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,
 
 /* block 310 */
-765,770,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,
-1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,
-1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,
-1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,
-1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,
-1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
 
 /* block 311 */
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
 
 /* block 312 */
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
 
 /* block 313 */
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-
-/* block 314 */
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,
-1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1032,1032,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,
+1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1039,1039,
 };
 
 #if UCD_BLOCK_SIZE != 128
index 513c54e29e6b7fb902aadf07965614557a189235..74c1cc5391a23d973a38cf20ffec9b5d15d82780 100644 (file)
@@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
+
 #ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD
 #define PCRE2_UCP_H_IDEMPOTENT_GUARD
 
@@ -301,6 +302,7 @@ enum {
   ucp_Multani,
   ucp_Old_Hungarian,
   ucp_Adlam,
+  ucp_Newa,
   ucp_Osage,
   ucp_Tangut,
   ucp_Masaram_Gondi,
@@ -376,7 +378,6 @@ enum {
   ucp_SignWriting,
   ucp_Bhaiksuki,
   ucp_Marchen,
-  ucp_Newa,
   ucp_Nushu,
   ucp_Soyombo,
   ucp_Zanabazar_Square,
@@ -394,6 +395,10 @@ enum {
   ucp_Kawi,
   ucp_Nag_Mundari,
   ucp_Kirat_Rai,
+  ucp_Sidetic,
+  ucp_Tai_Yo,
+  ucp_Tolong_Siki,
+  ucp_Beria_Erfe,
 
   /* This must be last */
   ucp_Script_Count
index 6f1731d32c89fa2d1375f3ac83e2beb98f1006b4..06a5c0e564a1ee2a55e1fafbd1dc46e1e514c9b0 100644 (file)
@@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
+
 #ifdef SUPPORT_UNICODE
 
 /* The PRIV(utt)[] table below translates Unicode property names into type and
@@ -81,6 +82,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */
 #define STRING_batk0 STR_b STR_a STR_t STR_k "\0"
 #define STRING_beng0 STR_b STR_e STR_n STR_g "\0"
 #define STRING_bengali0 STR_b STR_e STR_n STR_g STR_a STR_l STR_i "\0"
+#define STRING_berf0 STR_b STR_e STR_r STR_f "\0"
+#define STRING_beriaerfe0 STR_b STR_e STR_r STR_i STR_a STR_e STR_r STR_f STR_e "\0"
 #define STRING_bhaiksuki0 STR_b STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i "\0"
 #define STRING_bhks0 STR_b STR_h STR_k STR_s "\0"
 #define STRING_bidial0 STR_b STR_i STR_d STR_i STR_a STR_l "\0"
@@ -459,6 +462,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */
 #define STRING_shrd0 STR_s STR_h STR_r STR_d "\0"
 #define STRING_sidd0 STR_s STR_i STR_d STR_d "\0"
 #define STRING_siddham0 STR_s STR_i STR_d STR_d STR_h STR_a STR_m "\0"
+#define STRING_sidetic0 STR_s STR_i STR_d STR_e STR_t STR_i STR_c "\0"
+#define STRING_sidt0 STR_s STR_i STR_d STR_t "\0"
 #define STRING_signwriting0 STR_s STR_i STR_g STR_n STR_w STR_r STR_i STR_t STR_i STR_n STR_g "\0"
 #define STRING_sind0 STR_s STR_i STR_n STR_d "\0"
 #define STRING_sinh0 STR_s STR_i STR_n STR_h "\0"
@@ -490,6 +495,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */
 #define STRING_taile0 STR_t STR_a STR_i STR_l STR_e "\0"
 #define STRING_taitham0 STR_t STR_a STR_i STR_t STR_h STR_a STR_m "\0"
 #define STRING_taiviet0 STR_t STR_a STR_i STR_v STR_i STR_e STR_t "\0"
+#define STRING_taiyo0 STR_t STR_a STR_i STR_y STR_o "\0"
 #define STRING_takr0 STR_t STR_a STR_k STR_r "\0"
 #define STRING_takri0 STR_t STR_a STR_k STR_r STR_i "\0"
 #define STRING_tale0 STR_t STR_a STR_l STR_e "\0"
@@ -500,6 +506,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */
 #define STRING_tangsa0 STR_t STR_a STR_n STR_g STR_s STR_a "\0"
 #define STRING_tangut0 STR_t STR_a STR_n STR_g STR_u STR_t "\0"
 #define STRING_tavt0 STR_t STR_a STR_v STR_t "\0"
+#define STRING_tayo0 STR_t STR_a STR_y STR_o "\0"
 #define STRING_telu0 STR_t STR_e STR_l STR_u "\0"
 #define STRING_telugu0 STR_t STR_e STR_l STR_u STR_g STR_u "\0"
 #define STRING_term0 STR_t STR_e STR_r STR_m "\0"
@@ -517,6 +524,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */
 #define STRING_tnsa0 STR_t STR_n STR_s STR_a "\0"
 #define STRING_todhri0 STR_t STR_o STR_d STR_h STR_r STR_i "\0"
 #define STRING_todr0 STR_t STR_o STR_d STR_r "\0"
+#define STRING_tolongsiki0 STR_t STR_o STR_l STR_o STR_n STR_g STR_s STR_i STR_k STR_i "\0"
+#define STRING_tols0 STR_t STR_o STR_l STR_s "\0"
 #define STRING_toto0 STR_t STR_o STR_t STR_o "\0"
 #define STRING_tulutigalari0 STR_t STR_u STR_l STR_u STR_t STR_i STR_g STR_a STR_l STR_a STR_r STR_i "\0"
 #define STRING_tutg0 STR_t STR_u STR_t STR_g "\0"
@@ -593,6 +602,8 @@ const char PRIV(utt_names)[] =
   STRING_batk0
   STRING_beng0
   STRING_bengali0
+  STRING_berf0
+  STRING_beriaerfe0
   STRING_bhaiksuki0
   STRING_bhks0
   STRING_bidial0
@@ -971,6 +982,8 @@ const char PRIV(utt_names)[] =
   STRING_shrd0
   STRING_sidd0
   STRING_siddham0
+  STRING_sidetic0
+  STRING_sidt0
   STRING_signwriting0
   STRING_sind0
   STRING_sinh0
@@ -1002,6 +1015,7 @@ const char PRIV(utt_names)[] =
   STRING_taile0
   STRING_taitham0
   STRING_taiviet0
+  STRING_taiyo0
   STRING_takr0
   STRING_takri0
   STRING_tale0
@@ -1012,6 +1026,7 @@ const char PRIV(utt_names)[] =
   STRING_tangsa0
   STRING_tangut0
   STRING_tavt0
+  STRING_tayo0
   STRING_telu0
   STRING_telugu0
   STRING_term0
@@ -1029,6 +1044,8 @@ const char PRIV(utt_names)[] =
   STRING_tnsa0
   STRING_todhri0
   STRING_todr0
+  STRING_tolongsiki0
+  STRING_tols0
   STRING_toto0
   STRING_tulutigalari0
   STRING_tutg0
@@ -1105,488 +1122,496 @@ const ucp_type_table PRIV(utt)[] = {
   { 177, PT_SC, ucp_Batak },
   { 182, PT_SCX, ucp_Bengali },
   { 187, PT_SCX, ucp_Bengali },
-  { 195, PT_SC, ucp_Bhaiksuki },
-  { 205, PT_SC, ucp_Bhaiksuki },
-  { 210, PT_BIDICL, ucp_bidiAL },
-  { 217, PT_BIDICL, ucp_bidiAN },
-  { 224, PT_BIDICL, ucp_bidiB },
-  { 230, PT_BIDICL, ucp_bidiBN },
-  { 237, PT_BOOL, ucp_Bidi_Control },
-  { 243, PT_BOOL, ucp_Bidi_Control },
-  { 255, PT_BIDICL, ucp_bidiCS },
-  { 262, PT_BIDICL, ucp_bidiEN },
-  { 269, PT_BIDICL, ucp_bidiES },
-  { 276, PT_BIDICL, ucp_bidiET },
-  { 283, PT_BIDICL, ucp_bidiFSI },
-  { 291, PT_BIDICL, ucp_bidiL },
-  { 297, PT_BIDICL, ucp_bidiLRE },
-  { 305, PT_BIDICL, ucp_bidiLRI },
-  { 313, PT_BIDICL, ucp_bidiLRO },
-  { 321, PT_BOOL, ucp_Bidi_Mirrored },
-  { 327, PT_BOOL, ucp_Bidi_Mirrored },
-  { 340, PT_BIDICL, ucp_bidiNSM },
-  { 348, PT_BIDICL, ucp_bidiON },
-  { 355, PT_BIDICL, ucp_bidiPDF },
-  { 363, PT_BIDICL, ucp_bidiPDI },
-  { 371, PT_BIDICL, ucp_bidiR },
-  { 377, PT_BIDICL, ucp_bidiRLE },
-  { 385, PT_BIDICL, ucp_bidiRLI },
-  { 393, PT_BIDICL, ucp_bidiRLO },
-  { 401, PT_BIDICL, ucp_bidiS },
-  { 407, PT_BIDICL, ucp_bidiWS },
-  { 414, PT_SCX, ucp_Bopomofo },
-  { 419, PT_SCX, ucp_Bopomofo },
-  { 428, PT_SC, ucp_Brahmi },
-  { 433, PT_SC, ucp_Brahmi },
-  { 440, PT_SC, ucp_Braille },
-  { 445, PT_SC, ucp_Braille },
-  { 453, PT_SCX, ucp_Buginese },
-  { 458, PT_SCX, ucp_Buginese },
-  { 467, PT_SCX, ucp_Buhid },
-  { 472, PT_SCX, ucp_Buhid },
-  { 478, PT_GC, ucp_C },
-  { 480, PT_SCX, ucp_Chakma },
-  { 485, PT_SC, ucp_Canadian_Aboriginal },
-  { 504, PT_SC, ucp_Canadian_Aboriginal },
-  { 509, PT_SCX, ucp_Carian },
-  { 514, PT_SCX, ucp_Carian },
-  { 521, PT_BOOL, ucp_Cased },
-  { 527, PT_BOOL, ucp_Case_Ignorable },
-  { 541, PT_SCX, ucp_Caucasian_Albanian },
-  { 559, PT_PC, ucp_Cc },
-  { 562, PT_PC, ucp_Cf },
-  { 565, PT_SCX, ucp_Chakma },
-  { 572, PT_SC, ucp_Cham },
-  { 577, PT_BOOL, ucp_Changes_When_Casefolded },
-  { 599, PT_BOOL, ucp_Changes_When_Casemapped },
-  { 621, PT_BOOL, ucp_Changes_When_Lowercased },
-  { 643, PT_BOOL, ucp_Changes_When_Titlecased },
-  { 665, PT_BOOL, ucp_Changes_When_Uppercased },
-  { 687, PT_SCX, ucp_Cherokee },
-  { 692, PT_SCX, ucp_Cherokee },
-  { 701, PT_SC, ucp_Chorasmian },
-  { 712, PT_SC, ucp_Chorasmian },
-  { 717, PT_BOOL, ucp_Case_Ignorable },
-  { 720, PT_PC, ucp_Cn },
-  { 723, PT_PC, ucp_Co },
-  { 726, PT_SC, ucp_Common },
-  { 733, PT_SCX, ucp_Coptic },
-  { 738, PT_SCX, ucp_Coptic },
-  { 745, PT_SCX, ucp_Cypro_Minoan },
-  { 750, PT_SCX, ucp_Cypriot },
-  { 755, PT_PC, ucp_Cs },
-  { 758, PT_SC, ucp_Cuneiform },
-  { 768, PT_BOOL, ucp_Changes_When_Casefolded },
-  { 773, PT_BOOL, ucp_Changes_When_Casemapped },
-  { 778, PT_BOOL, ucp_Changes_When_Lowercased },
-  { 782, PT_BOOL, ucp_Changes_When_Titlecased },
-  { 786, PT_BOOL, ucp_Changes_When_Uppercased },
-  { 790, PT_SCX, ucp_Cypriot },
-  { 798, PT_SCX, ucp_Cypro_Minoan },
-  { 810, PT_SCX, ucp_Cyrillic },
-  { 819, PT_SCX, ucp_Cyrillic },
-  { 824, PT_BOOL, ucp_Dash },
-  { 829, PT_BOOL, ucp_Default_Ignorable_Code_Point },
-  { 855, PT_BOOL, ucp_Deprecated },
-  { 859, PT_BOOL, ucp_Deprecated },
-  { 870, PT_SC, ucp_Deseret },
-  { 878, PT_SCX, ucp_Devanagari },
-  { 883, PT_SCX, ucp_Devanagari },
-  { 894, PT_BOOL, ucp_Default_Ignorable_Code_Point },
-  { 897, PT_BOOL, ucp_Diacritic },
-  { 901, PT_BOOL, ucp_Diacritic },
-  { 911, PT_SC, ucp_Dives_Akuru },
-  { 916, PT_SC, ucp_Dives_Akuru },
-  { 927, PT_SCX, ucp_Dogra },
-  { 932, PT_SCX, ucp_Dogra },
-  { 938, PT_SC, ucp_Deseret },
-  { 943, PT_SCX, ucp_Duployan },
-  { 948, PT_SCX, ucp_Duployan },
-  { 957, PT_BOOL, ucp_Emoji_Modifier_Base },
-  { 963, PT_BOOL, ucp_Emoji_Component },
-  { 969, PT_SC, ucp_Egyptian_Hieroglyphs },
-  { 974, PT_SC, ucp_Egyptian_Hieroglyphs },
-  { 994, PT_SCX, ucp_Elbasan },
-  { 999, PT_SCX, ucp_Elbasan },
-  { 1007, PT_SC, ucp_Elymaic },
-  { 1012, PT_SC, ucp_Elymaic },
-  { 1020, PT_BOOL, ucp_Emoji_Modifier },
-  { 1025, PT_BOOL, ucp_Emoji },
-  { 1031, PT_BOOL, ucp_Emoji_Component },
-  { 1046, PT_BOOL, ucp_Emoji_Modifier },
-  { 1060, PT_BOOL, ucp_Emoji_Modifier_Base },
-  { 1078, PT_BOOL, ucp_Emoji_Presentation },
-  { 1096, PT_BOOL, ucp_Emoji_Presentation },
-  { 1102, PT_SCX, ucp_Ethiopic },
-  { 1107, PT_SCX, ucp_Ethiopic },
-  { 1116, PT_BOOL, ucp_Extender },
-  { 1120, PT_BOOL, ucp_Extended_Pictographic },
-  { 1141, PT_BOOL, ucp_Extender },
-  { 1150, PT_BOOL, ucp_Extended_Pictographic },
-  { 1158, PT_SCX, ucp_Garay },
-  { 1163, PT_SCX, ucp_Garay },
-  { 1169, PT_SCX, ucp_Georgian },
-  { 1174, PT_SCX, ucp_Georgian },
-  { 1183, PT_SCX, ucp_Glagolitic },
-  { 1188, PT_SCX, ucp_Glagolitic },
-  { 1199, PT_SCX, ucp_Gunjala_Gondi },
-  { 1204, PT_SCX, ucp_Masaram_Gondi },
-  { 1209, PT_SCX, ucp_Gothic },
-  { 1214, PT_SCX, ucp_Gothic },
-  { 1221, PT_SCX, ucp_Grantha },
-  { 1226, PT_SCX, ucp_Grantha },
-  { 1234, PT_BOOL, ucp_Grapheme_Base },
-  { 1247, PT_BOOL, ucp_Grapheme_Extend },
-  { 1262, PT_BOOL, ucp_Grapheme_Link },
-  { 1275, PT_BOOL, ucp_Grapheme_Base },
-  { 1282, PT_SCX, ucp_Greek },
-  { 1288, PT_SCX, ucp_Greek },
-  { 1293, PT_BOOL, ucp_Grapheme_Extend },
-  { 1299, PT_BOOL, ucp_Grapheme_Link },
-  { 1306, PT_SCX, ucp_Gujarati },
-  { 1315, PT_SCX, ucp_Gujarati },
-  { 1320, PT_SCX, ucp_Gurung_Khema },
-  { 1325, PT_SCX, ucp_Gunjala_Gondi },
-  { 1338, PT_SCX, ucp_Gurmukhi },
-  { 1347, PT_SCX, ucp_Gurmukhi },
-  { 1352, PT_SCX, ucp_Gurung_Khema },
-  { 1364, PT_SCX, ucp_Han },
-  { 1368, PT_SCX, ucp_Hangul },
-  { 1373, PT_SCX, ucp_Hangul },
-  { 1380, PT_SCX, ucp_Han },
-  { 1385, PT_SCX, ucp_Hanifi_Rohingya },
-  { 1400, PT_SCX, ucp_Hanunoo },
-  { 1405, PT_SCX, ucp_Hanunoo },
-  { 1413, PT_SC, ucp_Hatran },
-  { 1418, PT_SC, ucp_Hatran },
-  { 1425, PT_SCX, ucp_Hebrew },
-  { 1430, PT_SCX, ucp_Hebrew },
-  { 1437, PT_BOOL, ucp_Hex_Digit },
-  { 1441, PT_BOOL, ucp_Hex_Digit },
-  { 1450, PT_SCX, ucp_Hiragana },
-  { 1455, PT_SCX, ucp_Hiragana },
-  { 1464, PT_SC, ucp_Anatolian_Hieroglyphs },
-  { 1469, PT_SC, ucp_Pahawh_Hmong },
-  { 1474, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
-  { 1479, PT_SCX, ucp_Old_Hungarian },
-  { 1484, PT_BOOL, ucp_ID_Continue },
-  { 1488, PT_BOOL, ucp_ID_Compat_Math_Continue },
-  { 1509, PT_BOOL, ucp_ID_Compat_Math_Start },
-  { 1527, PT_BOOL, ucp_ID_Continue },
-  { 1538, PT_BOOL, ucp_Ideographic },
-  { 1543, PT_BOOL, ucp_Ideographic },
-  { 1555, PT_BOOL, ucp_ID_Start },
-  { 1559, PT_BOOL, ucp_IDS_Binary_Operator },
-  { 1564, PT_BOOL, ucp_IDS_Binary_Operator },
-  { 1582, PT_BOOL, ucp_IDS_Trinary_Operator },
-  { 1587, PT_BOOL, ucp_ID_Start },
-  { 1595, PT_BOOL, ucp_IDS_Trinary_Operator },
-  { 1614, PT_BOOL, ucp_IDS_Unary_Operator },
-  { 1619, PT_BOOL, ucp_IDS_Unary_Operator },
-  { 1636, PT_SC, ucp_Imperial_Aramaic },
-  { 1652, PT_BOOL, ucp_InCB },
-  { 1657, PT_SC, ucp_Inherited },
-  { 1667, PT_SC, ucp_Inscriptional_Pahlavi },
-  { 1688, PT_SC, ucp_Inscriptional_Parthian },
-  { 1710, PT_SC, ucp_Old_Italic },
-  { 1715, PT_SCX, ucp_Javanese },
-  { 1720, PT_SCX, ucp_Javanese },
-  { 1729, PT_BOOL, ucp_Join_Control },
-  { 1735, PT_BOOL, ucp_Join_Control },
-  { 1747, PT_SCX, ucp_Kaithi },
-  { 1754, PT_SCX, ucp_Kayah_Li },
-  { 1759, PT_SCX, ucp_Katakana },
-  { 1764, PT_SCX, ucp_Kannada },
-  { 1772, PT_SCX, ucp_Katakana },
-  { 1781, PT_SC, ucp_Kawi },
-  { 1786, PT_SCX, ucp_Kayah_Li },
-  { 1794, PT_SC, ucp_Kharoshthi },
-  { 1799, PT_SC, ucp_Kharoshthi },
-  { 1810, PT_SC, ucp_Khitan_Small_Script },
-  { 1828, PT_SC, ucp_Khmer },
-  { 1834, PT_SC, ucp_Khmer },
-  { 1839, PT_SCX, ucp_Khojki },
-  { 1844, PT_SCX, ucp_Khojki },
-  { 1851, PT_SCX, ucp_Khudawadi },
-  { 1861, PT_SC, ucp_Kirat_Rai },
-  { 1870, PT_SC, ucp_Khitan_Small_Script },
-  { 1875, PT_SCX, ucp_Kannada },
-  { 1880, PT_SC, ucp_Kirat_Rai },
-  { 1885, PT_SCX, ucp_Kaithi },
-  { 1890, PT_GC, ucp_L },
-  { 1892, PT_LAMP, 0 },
-  { 1895, PT_SC, ucp_Tai_Tham },
-  { 1900, PT_SC, ucp_Lao },
-  { 1904, PT_SC, ucp_Lao },
-  { 1909, PT_SCX, ucp_Latin },
-  { 1915, PT_SCX, ucp_Latin },
-  { 1920, PT_LAMP, 0 },
-  { 1923, PT_SC, ucp_Lepcha },
-  { 1928, PT_SC, ucp_Lepcha },
-  { 1935, PT_SCX, ucp_Limbu },
-  { 1940, PT_SCX, ucp_Limbu },
-  { 1946, PT_SCX, ucp_Linear_A },
-  { 1951, PT_SCX, ucp_Linear_B },
-  { 1956, PT_SCX, ucp_Linear_A },
-  { 1964, PT_SCX, ucp_Linear_B },
-  { 1972, PT_SCX, ucp_Lisu },
-  { 1977, PT_PC, ucp_Ll },
-  { 1980, PT_PC, ucp_Lm },
-  { 1983, PT_PC, ucp_Lo },
-  { 1986, PT_BOOL, ucp_Logical_Order_Exception },
-  { 1990, PT_BOOL, ucp_Logical_Order_Exception },
-  { 2012, PT_BOOL, ucp_Lowercase },
-  { 2018, PT_BOOL, ucp_Lowercase },
-  { 2028, PT_PC, ucp_Lt },
-  { 2031, PT_PC, ucp_Lu },
-  { 2034, PT_SCX, ucp_Lycian },
-  { 2039, PT_SCX, ucp_Lycian },
-  { 2046, PT_SCX, ucp_Lydian },
-  { 2051, PT_SCX, ucp_Lydian },
-  { 2058, PT_GC, ucp_M },
-  { 2060, PT_SCX, ucp_Mahajani },
-  { 2069, PT_SCX, ucp_Mahajani },
-  { 2074, PT_SC, ucp_Makasar },
-  { 2079, PT_SC, ucp_Makasar },
-  { 2087, PT_SCX, ucp_Malayalam },
-  { 2097, PT_SCX, ucp_Mandaic },
-  { 2102, PT_SCX, ucp_Mandaic },
-  { 2110, PT_SCX, ucp_Manichaean },
-  { 2115, PT_SCX, ucp_Manichaean },
-  { 2126, PT_SC, ucp_Marchen },
-  { 2131, PT_SC, ucp_Marchen },
-  { 2139, PT_SCX, ucp_Masaram_Gondi },
-  { 2152, PT_BOOL, ucp_Math },
-  { 2157, PT_PC, ucp_Mc },
-  { 2160, PT_BOOL, ucp_Modifier_Combining_Mark },
-  { 2164, PT_PC, ucp_Me },
-  { 2167, PT_SC, ucp_Medefaidrin },
-  { 2179, PT_SC, ucp_Medefaidrin },
-  { 2184, PT_SC, ucp_Meetei_Mayek },
-  { 2196, PT_SC, ucp_Mende_Kikakui },
-  { 2201, PT_SC, ucp_Mende_Kikakui },
-  { 2214, PT_SC, ucp_Meroitic_Cursive },
-  { 2219, PT_SCX, ucp_Meroitic_Hieroglyphs },
-  { 2224, PT_SC, ucp_Meroitic_Cursive },
-  { 2240, PT_SCX, ucp_Meroitic_Hieroglyphs },
-  { 2260, PT_SC, ucp_Miao },
-  { 2265, PT_SCX, ucp_Malayalam },
-  { 2270, PT_PC, ucp_Mn },
-  { 2273, PT_SCX, ucp_Modi },
-  { 2278, PT_BOOL, ucp_Modifier_Combining_Mark },
-  { 2300, PT_SCX, ucp_Mongolian },
-  { 2305, PT_SCX, ucp_Mongolian },
-  { 2315, PT_SC, ucp_Mro },
-  { 2319, PT_SC, ucp_Mro },
-  { 2324, PT_SC, ucp_Meetei_Mayek },
-  { 2329, PT_SCX, ucp_Multani },
-  { 2334, PT_SCX, ucp_Multani },
-  { 2342, PT_SCX, ucp_Myanmar },
-  { 2350, PT_SCX, ucp_Myanmar },
-  { 2355, PT_GC, ucp_N },
-  { 2357, PT_SC, ucp_Nabataean },
-  { 2367, PT_SC, ucp_Nag_Mundari },
-  { 2372, PT_SC, ucp_Nag_Mundari },
-  { 2383, PT_SCX, ucp_Nandinagari },
-  { 2388, PT_SCX, ucp_Nandinagari },
-  { 2400, PT_SC, ucp_Old_North_Arabian },
-  { 2405, PT_SC, ucp_Nabataean },
-  { 2410, PT_BOOL, ucp_Noncharacter_Code_Point },
-  { 2416, PT_PC, ucp_Nd },
-  { 2419, PT_SC, ucp_Newa },
-  { 2424, PT_SC, ucp_New_Tai_Lue },
-  { 2434, PT_SCX, ucp_Nko },
-  { 2438, PT_SCX, ucp_Nko },
-  { 2443, PT_PC, ucp_Nl },
-  { 2446, PT_PC, ucp_No },
-  { 2449, PT_BOOL, ucp_Noncharacter_Code_Point },
-  { 2471, PT_SC, ucp_Nushu },
-  { 2476, PT_SC, ucp_Nushu },
-  { 2482, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
-  { 2503, PT_SC, ucp_Ogham },
-  { 2508, PT_SC, ucp_Ogham },
-  { 2514, PT_SC, ucp_Ol_Chiki },
-  { 2522, PT_SC, ucp_Ol_Chiki },
-  { 2527, PT_SCX, ucp_Old_Hungarian },
-  { 2540, PT_SC, ucp_Old_Italic },
-  { 2550, PT_SC, ucp_Old_North_Arabian },
-  { 2566, PT_SCX, ucp_Old_Permic },
-  { 2576, PT_SC, ucp_Old_Persian },
-  { 2587, PT_SC, ucp_Old_Sogdian },
-  { 2598, PT_SC, ucp_Old_South_Arabian },
-  { 2614, PT_SCX, ucp_Old_Turkic },
-  { 2624, PT_SCX, ucp_Old_Uyghur },
-  { 2634, PT_SCX, ucp_Ol_Onal },
-  { 2641, PT_SCX, ucp_Ol_Onal },
-  { 2646, PT_SCX, ucp_Oriya },
-  { 2652, PT_SCX, ucp_Old_Turkic },
-  { 2657, PT_SCX, ucp_Oriya },
-  { 2662, PT_SCX, ucp_Osage },
-  { 2668, PT_SCX, ucp_Osage },
-  { 2673, PT_SC, ucp_Osmanya },
-  { 2678, PT_SC, ucp_Osmanya },
-  { 2686, PT_SCX, ucp_Old_Uyghur },
-  { 2691, PT_GC, ucp_P },
-  { 2693, PT_SC, ucp_Pahawh_Hmong },
-  { 2705, PT_SC, ucp_Palmyrene },
-  { 2710, PT_SC, ucp_Palmyrene },
-  { 2720, PT_BOOL, ucp_Pattern_Syntax },
-  { 2727, PT_BOOL, ucp_Pattern_Syntax },
-  { 2741, PT_BOOL, ucp_Pattern_White_Space },
-  { 2759, PT_BOOL, ucp_Pattern_White_Space },
-  { 2765, PT_SC, ucp_Pau_Cin_Hau },
-  { 2770, PT_SC, ucp_Pau_Cin_Hau },
-  { 2780, PT_PC, ucp_Pc },
-  { 2783, PT_BOOL, ucp_Prepended_Concatenation_Mark },
-  { 2787, PT_PC, ucp_Pd },
-  { 2790, PT_PC, ucp_Pe },
-  { 2793, PT_SCX, ucp_Old_Permic },
-  { 2798, PT_PC, ucp_Pf },
-  { 2801, PT_SCX, ucp_Phags_Pa },
-  { 2806, PT_SCX, ucp_Phags_Pa },
-  { 2814, PT_SC, ucp_Inscriptional_Pahlavi },
-  { 2819, PT_SCX, ucp_Psalter_Pahlavi },
-  { 2824, PT_SC, ucp_Phoenician },
-  { 2829, PT_SC, ucp_Phoenician },
-  { 2840, PT_PC, ucp_Pi },
-  { 2843, PT_SC, ucp_Miao },
-  { 2848, PT_PC, ucp_Po },
-  { 2851, PT_BOOL, ucp_Prepended_Concatenation_Mark },
-  { 2878, PT_SC, ucp_Inscriptional_Parthian },
-  { 2883, PT_PC, ucp_Ps },
-  { 2886, PT_SCX, ucp_Psalter_Pahlavi },
-  { 2901, PT_SCX, ucp_Coptic },
-  { 2906, PT_SC, ucp_Inherited },
-  { 2911, PT_BOOL, ucp_Quotation_Mark },
-  { 2917, PT_BOOL, ucp_Quotation_Mark },
-  { 2931, PT_BOOL, ucp_Radical },
-  { 2939, PT_BOOL, ucp_Regional_Indicator },
-  { 2957, PT_SC, ucp_Rejang },
-  { 2964, PT_BOOL, ucp_Regional_Indicator },
-  { 2967, PT_SC, ucp_Rejang },
-  { 2972, PT_SCX, ucp_Hanifi_Rohingya },
-  { 2977, PT_SCX, ucp_Runic },
-  { 2983, PT_SCX, ucp_Runic },
-  { 2988, PT_GC, ucp_S },
-  { 2990, PT_SCX, ucp_Samaritan },
-  { 3000, PT_SCX, ucp_Samaritan },
-  { 3005, PT_SC, ucp_Old_South_Arabian },
-  { 3010, PT_SC, ucp_Saurashtra },
-  { 3015, PT_SC, ucp_Saurashtra },
-  { 3026, PT_PC, ucp_Sc },
-  { 3029, PT_BOOL, ucp_Soft_Dotted },
-  { 3032, PT_BOOL, ucp_Sentence_Terminal },
-  { 3049, PT_SC, ucp_SignWriting },
-  { 3054, PT_SCX, ucp_Sharada },
-  { 3062, PT_SCX, ucp_Shavian },
-  { 3070, PT_SCX, ucp_Shavian },
-  { 3075, PT_SCX, ucp_Sharada },
-  { 3080, PT_SC, ucp_Siddham },
-  { 3085, PT_SC, ucp_Siddham },
-  { 3093, PT_SC, ucp_SignWriting },
-  { 3105, PT_SCX, ucp_Khudawadi },
-  { 3110, PT_SCX, ucp_Sinhala },
-  { 3115, PT_SCX, ucp_Sinhala },
-  { 3123, PT_PC, ucp_Sk },
-  { 3126, PT_PC, ucp_Sm },
-  { 3129, PT_PC, ucp_So },
-  { 3132, PT_BOOL, ucp_Soft_Dotted },
-  { 3143, PT_SCX, ucp_Sogdian },
-  { 3148, PT_SCX, ucp_Sogdian },
-  { 3156, PT_SC, ucp_Old_Sogdian },
-  { 3161, PT_SC, ucp_Sora_Sompeng },
-  { 3166, PT_SC, ucp_Sora_Sompeng },
-  { 3178, PT_SC, ucp_Soyombo },
-  { 3183, PT_SC, ucp_Soyombo },
-  { 3191, PT_BOOL, ucp_White_Space },
-  { 3197, PT_BOOL, ucp_Sentence_Terminal },
-  { 3203, PT_SC, ucp_Sundanese },
-  { 3208, PT_SC, ucp_Sundanese },
-  { 3218, PT_SCX, ucp_Sunuwar },
-  { 3223, PT_SCX, ucp_Sunuwar },
-  { 3231, PT_SCX, ucp_Syloti_Nagri },
-  { 3236, PT_SCX, ucp_Syloti_Nagri },
-  { 3248, PT_SCX, ucp_Syriac },
-  { 3253, PT_SCX, ucp_Syriac },
-  { 3260, PT_SCX, ucp_Tagalog },
-  { 3268, PT_SCX, ucp_Tagbanwa },
-  { 3273, PT_SCX, ucp_Tagbanwa },
-  { 3282, PT_SCX, ucp_Tai_Le },
-  { 3288, PT_SC, ucp_Tai_Tham },
-  { 3296, PT_SC, ucp_Tai_Viet },
-  { 3304, PT_SCX, ucp_Takri },
-  { 3309, PT_SCX, ucp_Takri },
-  { 3315, PT_SCX, ucp_Tai_Le },
-  { 3320, PT_SC, ucp_New_Tai_Lue },
-  { 3325, PT_SCX, ucp_Tamil },
-  { 3331, PT_SCX, ucp_Tamil },
-  { 3336, PT_SCX, ucp_Tangut },
-  { 3341, PT_SC, ucp_Tangsa },
-  { 3348, PT_SCX, ucp_Tangut },
-  { 3355, PT_SC, ucp_Tai_Viet },
-  { 3360, PT_SCX, ucp_Telugu },
-  { 3365, PT_SCX, ucp_Telugu },
-  { 3372, PT_BOOL, ucp_Terminal_Punctuation },
-  { 3377, PT_BOOL, ucp_Terminal_Punctuation },
-  { 3397, PT_SCX, ucp_Tifinagh },
-  { 3402, PT_SCX, ucp_Tagalog },
-  { 3407, PT_SCX, ucp_Thaana },
-  { 3412, PT_SCX, ucp_Thaana },
-  { 3419, PT_SCX, ucp_Thai },
-  { 3424, PT_SCX, ucp_Tibetan },
-  { 3432, PT_SCX, ucp_Tibetan },
-  { 3437, PT_SCX, ucp_Tifinagh },
-  { 3446, PT_SCX, ucp_Tirhuta },
-  { 3451, PT_SCX, ucp_Tirhuta },
-  { 3459, PT_SC, ucp_Tangsa },
-  { 3464, PT_SCX, ucp_Todhri },
-  { 3471, PT_SCX, ucp_Todhri },
-  { 3476, PT_SCX, ucp_Toto },
-  { 3481, PT_SCX, ucp_Tulu_Tigalari },
-  { 3494, PT_SCX, ucp_Tulu_Tigalari },
-  { 3499, PT_SC, ucp_Ugaritic },
-  { 3504, PT_SC, ucp_Ugaritic },
-  { 3513, PT_BOOL, ucp_Unified_Ideograph },
-  { 3519, PT_BOOL, ucp_Unified_Ideograph },
-  { 3536, PT_SC, ucp_Unknown },
-  { 3544, PT_BOOL, ucp_Uppercase },
-  { 3550, PT_BOOL, ucp_Uppercase },
-  { 3560, PT_SC, ucp_Vai },
-  { 3564, PT_SC, ucp_Vai },
-  { 3569, PT_BOOL, ucp_Variation_Selector },
-  { 3587, PT_SC, ucp_Vithkuqi },
-  { 3592, PT_SC, ucp_Vithkuqi },
-  { 3601, PT_BOOL, ucp_Variation_Selector },
-  { 3604, PT_SC, ucp_Wancho },
-  { 3611, PT_SC, ucp_Warang_Citi },
-  { 3616, PT_SC, ucp_Warang_Citi },
-  { 3627, PT_SC, ucp_Wancho },
-  { 3632, PT_BOOL, ucp_White_Space },
-  { 3643, PT_BOOL, ucp_White_Space },
-  { 3650, PT_ALNUM, 0 },
-  { 3654, PT_BOOL, ucp_XID_Continue },
-  { 3659, PT_BOOL, ucp_XID_Continue },
-  { 3671, PT_BOOL, ucp_XID_Start },
-  { 3676, PT_BOOL, ucp_XID_Start },
-  { 3685, PT_SC, ucp_Old_Persian },
-  { 3690, PT_PXSPACE, 0 },
-  { 3694, PT_SPACE, 0 },
-  { 3698, PT_SC, ucp_Cuneiform },
-  { 3703, PT_UCNC, 0 },
-  { 3707, PT_WORD, 0 },
-  { 3711, PT_SCX, ucp_Yezidi },
-  { 3716, PT_SCX, ucp_Yezidi },
-  { 3723, PT_SCX, ucp_Yi },
-  { 3726, PT_SCX, ucp_Yi },
-  { 3731, PT_GC, ucp_Z },
-  { 3733, PT_SC, ucp_Zanabazar_Square },
-  { 3749, PT_SC, ucp_Zanabazar_Square },
-  { 3754, PT_SC, ucp_Inherited },
-  { 3759, PT_PC, ucp_Zl },
-  { 3762, PT_PC, ucp_Zp },
-  { 3765, PT_PC, ucp_Zs },
-  { 3768, PT_SC, ucp_Common },
-  { 3773, PT_SC, ucp_Unknown }
+  { 195, PT_SC, ucp_Beria_Erfe },
+  { 200, PT_SC, ucp_Beria_Erfe },
+  { 210, PT_SC, ucp_Bhaiksuki },
+  { 220, PT_SC, ucp_Bhaiksuki },
+  { 225, PT_BIDICL, ucp_bidiAL },
+  { 232, PT_BIDICL, ucp_bidiAN },
+  { 239, PT_BIDICL, ucp_bidiB },
+  { 245, PT_BIDICL, ucp_bidiBN },
+  { 252, PT_BOOL, ucp_Bidi_Control },
+  { 258, PT_BOOL, ucp_Bidi_Control },
+  { 270, PT_BIDICL, ucp_bidiCS },
+  { 277, PT_BIDICL, ucp_bidiEN },
+  { 284, PT_BIDICL, ucp_bidiES },
+  { 291, PT_BIDICL, ucp_bidiET },
+  { 298, PT_BIDICL, ucp_bidiFSI },
+  { 306, PT_BIDICL, ucp_bidiL },
+  { 312, PT_BIDICL, ucp_bidiLRE },
+  { 320, PT_BIDICL, ucp_bidiLRI },
+  { 328, PT_BIDICL, ucp_bidiLRO },
+  { 336, PT_BOOL, ucp_Bidi_Mirrored },
+  { 342, PT_BOOL, ucp_Bidi_Mirrored },
+  { 355, PT_BIDICL, ucp_bidiNSM },
+  { 363, PT_BIDICL, ucp_bidiON },
+  { 370, PT_BIDICL, ucp_bidiPDF },
+  { 378, PT_BIDICL, ucp_bidiPDI },
+  { 386, PT_BIDICL, ucp_bidiR },
+  { 392, PT_BIDICL, ucp_bidiRLE },
+  { 400, PT_BIDICL, ucp_bidiRLI },
+  { 408, PT_BIDICL, ucp_bidiRLO },
+  { 416, PT_BIDICL, ucp_bidiS },
+  { 422, PT_BIDICL, ucp_bidiWS },
+  { 429, PT_SCX, ucp_Bopomofo },
+  { 434, PT_SCX, ucp_Bopomofo },
+  { 443, PT_SC, ucp_Brahmi },
+  { 448, PT_SC, ucp_Brahmi },
+  { 455, PT_SC, ucp_Braille },
+  { 460, PT_SC, ucp_Braille },
+  { 468, PT_SCX, ucp_Buginese },
+  { 473, PT_SCX, ucp_Buginese },
+  { 482, PT_SCX, ucp_Buhid },
+  { 487, PT_SCX, ucp_Buhid },
+  { 493, PT_GC, ucp_C },
+  { 495, PT_SCX, ucp_Chakma },
+  { 500, PT_SC, ucp_Canadian_Aboriginal },
+  { 519, PT_SC, ucp_Canadian_Aboriginal },
+  { 524, PT_SCX, ucp_Carian },
+  { 529, PT_SCX, ucp_Carian },
+  { 536, PT_BOOL, ucp_Cased },
+  { 542, PT_BOOL, ucp_Case_Ignorable },
+  { 556, PT_SCX, ucp_Caucasian_Albanian },
+  { 574, PT_PC, ucp_Cc },
+  { 577, PT_PC, ucp_Cf },
+  { 580, PT_SCX, ucp_Chakma },
+  { 587, PT_SC, ucp_Cham },
+  { 592, PT_BOOL, ucp_Changes_When_Casefolded },
+  { 614, PT_BOOL, ucp_Changes_When_Casemapped },
+  { 636, PT_BOOL, ucp_Changes_When_Lowercased },
+  { 658, PT_BOOL, ucp_Changes_When_Titlecased },
+  { 680, PT_BOOL, ucp_Changes_When_Uppercased },
+  { 702, PT_SCX, ucp_Cherokee },
+  { 707, PT_SCX, ucp_Cherokee },
+  { 716, PT_SC, ucp_Chorasmian },
+  { 727, PT_SC, ucp_Chorasmian },
+  { 732, PT_BOOL, ucp_Case_Ignorable },
+  { 735, PT_PC, ucp_Cn },
+  { 738, PT_PC, ucp_Co },
+  { 741, PT_SC, ucp_Common },
+  { 748, PT_SCX, ucp_Coptic },
+  { 753, PT_SCX, ucp_Coptic },
+  { 760, PT_SCX, ucp_Cypro_Minoan },
+  { 765, PT_SCX, ucp_Cypriot },
+  { 770, PT_PC, ucp_Cs },
+  { 773, PT_SC, ucp_Cuneiform },
+  { 783, PT_BOOL, ucp_Changes_When_Casefolded },
+  { 788, PT_BOOL, ucp_Changes_When_Casemapped },
+  { 793, PT_BOOL, ucp_Changes_When_Lowercased },
+  { 797, PT_BOOL, ucp_Changes_When_Titlecased },
+  { 801, PT_BOOL, ucp_Changes_When_Uppercased },
+  { 805, PT_SCX, ucp_Cypriot },
+  { 813, PT_SCX, ucp_Cypro_Minoan },
+  { 825, PT_SCX, ucp_Cyrillic },
+  { 834, PT_SCX, ucp_Cyrillic },
+  { 839, PT_BOOL, ucp_Dash },
+  { 844, PT_BOOL, ucp_Default_Ignorable_Code_Point },
+  { 870, PT_BOOL, ucp_Deprecated },
+  { 874, PT_BOOL, ucp_Deprecated },
+  { 885, PT_SC, ucp_Deseret },
+  { 893, PT_SCX, ucp_Devanagari },
+  { 898, PT_SCX, ucp_Devanagari },
+  { 909, PT_BOOL, ucp_Default_Ignorable_Code_Point },
+  { 912, PT_BOOL, ucp_Diacritic },
+  { 916, PT_BOOL, ucp_Diacritic },
+  { 926, PT_SC, ucp_Dives_Akuru },
+  { 931, PT_SC, ucp_Dives_Akuru },
+  { 942, PT_SCX, ucp_Dogra },
+  { 947, PT_SCX, ucp_Dogra },
+  { 953, PT_SC, ucp_Deseret },
+  { 958, PT_SCX, ucp_Duployan },
+  { 963, PT_SCX, ucp_Duployan },
+  { 972, PT_BOOL, ucp_Emoji_Modifier_Base },
+  { 978, PT_BOOL, ucp_Emoji_Component },
+  { 984, PT_SC, ucp_Egyptian_Hieroglyphs },
+  { 989, PT_SC, ucp_Egyptian_Hieroglyphs },
+  { 1009, PT_SCX, ucp_Elbasan },
+  { 1014, PT_SCX, ucp_Elbasan },
+  { 1022, PT_SC, ucp_Elymaic },
+  { 1027, PT_SC, ucp_Elymaic },
+  { 1035, PT_BOOL, ucp_Emoji_Modifier },
+  { 1040, PT_BOOL, ucp_Emoji },
+  { 1046, PT_BOOL, ucp_Emoji_Component },
+  { 1061, PT_BOOL, ucp_Emoji_Modifier },
+  { 1075, PT_BOOL, ucp_Emoji_Modifier_Base },
+  { 1093, PT_BOOL, ucp_Emoji_Presentation },
+  { 1111, PT_BOOL, ucp_Emoji_Presentation },
+  { 1117, PT_SCX, ucp_Ethiopic },
+  { 1122, PT_SCX, ucp_Ethiopic },
+  { 1131, PT_BOOL, ucp_Extender },
+  { 1135, PT_BOOL, ucp_Extended_Pictographic },
+  { 1156, PT_BOOL, ucp_Extender },
+  { 1165, PT_BOOL, ucp_Extended_Pictographic },
+  { 1173, PT_SCX, ucp_Garay },
+  { 1178, PT_SCX, ucp_Garay },
+  { 1184, PT_SCX, ucp_Georgian },
+  { 1189, PT_SCX, ucp_Georgian },
+  { 1198, PT_SCX, ucp_Glagolitic },
+  { 1203, PT_SCX, ucp_Glagolitic },
+  { 1214, PT_SCX, ucp_Gunjala_Gondi },
+  { 1219, PT_SCX, ucp_Masaram_Gondi },
+  { 1224, PT_SCX, ucp_Gothic },
+  { 1229, PT_SCX, ucp_Gothic },
+  { 1236, PT_SCX, ucp_Grantha },
+  { 1241, PT_SCX, ucp_Grantha },
+  { 1249, PT_BOOL, ucp_Grapheme_Base },
+  { 1262, PT_BOOL, ucp_Grapheme_Extend },
+  { 1277, PT_BOOL, ucp_Grapheme_Link },
+  { 1290, PT_BOOL, ucp_Grapheme_Base },
+  { 1297, PT_SCX, ucp_Greek },
+  { 1303, PT_SCX, ucp_Greek },
+  { 1308, PT_BOOL, ucp_Grapheme_Extend },
+  { 1314, PT_BOOL, ucp_Grapheme_Link },
+  { 1321, PT_SCX, ucp_Gujarati },
+  { 1330, PT_SCX, ucp_Gujarati },
+  { 1335, PT_SCX, ucp_Gurung_Khema },
+  { 1340, PT_SCX, ucp_Gunjala_Gondi },
+  { 1353, PT_SCX, ucp_Gurmukhi },
+  { 1362, PT_SCX, ucp_Gurmukhi },
+  { 1367, PT_SCX, ucp_Gurung_Khema },
+  { 1379, PT_SCX, ucp_Han },
+  { 1383, PT_SCX, ucp_Hangul },
+  { 1388, PT_SCX, ucp_Hangul },
+  { 1395, PT_SCX, ucp_Han },
+  { 1400, PT_SCX, ucp_Hanifi_Rohingya },
+  { 1415, PT_SCX, ucp_Hanunoo },
+  { 1420, PT_SCX, ucp_Hanunoo },
+  { 1428, PT_SC, ucp_Hatran },
+  { 1433, PT_SC, ucp_Hatran },
+  { 1440, PT_SCX, ucp_Hebrew },
+  { 1445, PT_SCX, ucp_Hebrew },
+  { 1452, PT_BOOL, ucp_Hex_Digit },
+  { 1456, PT_BOOL, ucp_Hex_Digit },
+  { 1465, PT_SCX, ucp_Hiragana },
+  { 1470, PT_SCX, ucp_Hiragana },
+  { 1479, PT_SC, ucp_Anatolian_Hieroglyphs },
+  { 1484, PT_SC, ucp_Pahawh_Hmong },
+  { 1489, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
+  { 1494, PT_SCX, ucp_Old_Hungarian },
+  { 1499, PT_BOOL, ucp_ID_Continue },
+  { 1503, PT_BOOL, ucp_ID_Compat_Math_Continue },
+  { 1524, PT_BOOL, ucp_ID_Compat_Math_Start },
+  { 1542, PT_BOOL, ucp_ID_Continue },
+  { 1553, PT_BOOL, ucp_Ideographic },
+  { 1558, PT_BOOL, ucp_Ideographic },
+  { 1570, PT_BOOL, ucp_ID_Start },
+  { 1574, PT_BOOL, ucp_IDS_Binary_Operator },
+  { 1579, PT_BOOL, ucp_IDS_Binary_Operator },
+  { 1597, PT_BOOL, ucp_IDS_Trinary_Operator },
+  { 1602, PT_BOOL, ucp_ID_Start },
+  { 1610, PT_BOOL, ucp_IDS_Trinary_Operator },
+  { 1629, PT_BOOL, ucp_IDS_Unary_Operator },
+  { 1634, PT_BOOL, ucp_IDS_Unary_Operator },
+  { 1651, PT_SC, ucp_Imperial_Aramaic },
+  { 1667, PT_BOOL, ucp_InCB },
+  { 1672, PT_SC, ucp_Inherited },
+  { 1682, PT_SC, ucp_Inscriptional_Pahlavi },
+  { 1703, PT_SC, ucp_Inscriptional_Parthian },
+  { 1725, PT_SC, ucp_Old_Italic },
+  { 1730, PT_SCX, ucp_Javanese },
+  { 1735, PT_SCX, ucp_Javanese },
+  { 1744, PT_BOOL, ucp_Join_Control },
+  { 1750, PT_BOOL, ucp_Join_Control },
+  { 1762, PT_SCX, ucp_Kaithi },
+  { 1769, PT_SCX, ucp_Kayah_Li },
+  { 1774, PT_SCX, ucp_Katakana },
+  { 1779, PT_SCX, ucp_Kannada },
+  { 1787, PT_SCX, ucp_Katakana },
+  { 1796, PT_SC, ucp_Kawi },
+  { 1801, PT_SCX, ucp_Kayah_Li },
+  { 1809, PT_SC, ucp_Kharoshthi },
+  { 1814, PT_SC, ucp_Kharoshthi },
+  { 1825, PT_SC, ucp_Khitan_Small_Script },
+  { 1843, PT_SC, ucp_Khmer },
+  { 1849, PT_SC, ucp_Khmer },
+  { 1854, PT_SCX, ucp_Khojki },
+  { 1859, PT_SCX, ucp_Khojki },
+  { 1866, PT_SCX, ucp_Khudawadi },
+  { 1876, PT_SC, ucp_Kirat_Rai },
+  { 1885, PT_SC, ucp_Khitan_Small_Script },
+  { 1890, PT_SCX, ucp_Kannada },
+  { 1895, PT_SC, ucp_Kirat_Rai },
+  { 1900, PT_SCX, ucp_Kaithi },
+  { 1905, PT_GC, ucp_L },
+  { 1907, PT_LAMP, 0 },
+  { 1910, PT_SC, ucp_Tai_Tham },
+  { 1915, PT_SC, ucp_Lao },
+  { 1919, PT_SC, ucp_Lao },
+  { 1924, PT_SCX, ucp_Latin },
+  { 1930, PT_SCX, ucp_Latin },
+  { 1935, PT_LAMP, 0 },
+  { 1938, PT_SC, ucp_Lepcha },
+  { 1943, PT_SC, ucp_Lepcha },
+  { 1950, PT_SCX, ucp_Limbu },
+  { 1955, PT_SCX, ucp_Limbu },
+  { 1961, PT_SCX, ucp_Linear_A },
+  { 1966, PT_SCX, ucp_Linear_B },
+  { 1971, PT_SCX, ucp_Linear_A },
+  { 1979, PT_SCX, ucp_Linear_B },
+  { 1987, PT_SCX, ucp_Lisu },
+  { 1992, PT_PC, ucp_Ll },
+  { 1995, PT_PC, ucp_Lm },
+  { 1998, PT_PC, ucp_Lo },
+  { 2001, PT_BOOL, ucp_Logical_Order_Exception },
+  { 2005, PT_BOOL, ucp_Logical_Order_Exception },
+  { 2027, PT_BOOL, ucp_Lowercase },
+  { 2033, PT_BOOL, ucp_Lowercase },
+  { 2043, PT_PC, ucp_Lt },
+  { 2046, PT_PC, ucp_Lu },
+  { 2049, PT_SCX, ucp_Lycian },
+  { 2054, PT_SCX, ucp_Lycian },
+  { 2061, PT_SCX, ucp_Lydian },
+  { 2066, PT_SCX, ucp_Lydian },
+  { 2073, PT_GC, ucp_M },
+  { 2075, PT_SCX, ucp_Mahajani },
+  { 2084, PT_SCX, ucp_Mahajani },
+  { 2089, PT_SC, ucp_Makasar },
+  { 2094, PT_SC, ucp_Makasar },
+  { 2102, PT_SCX, ucp_Malayalam },
+  { 2112, PT_SCX, ucp_Mandaic },
+  { 2117, PT_SCX, ucp_Mandaic },
+  { 2125, PT_SCX, ucp_Manichaean },
+  { 2130, PT_SCX, ucp_Manichaean },
+  { 2141, PT_SC, ucp_Marchen },
+  { 2146, PT_SC, ucp_Marchen },
+  { 2154, PT_SCX, ucp_Masaram_Gondi },
+  { 2167, PT_BOOL, ucp_Math },
+  { 2172, PT_PC, ucp_Mc },
+  { 2175, PT_BOOL, ucp_Modifier_Combining_Mark },
+  { 2179, PT_PC, ucp_Me },
+  { 2182, PT_SC, ucp_Medefaidrin },
+  { 2194, PT_SC, ucp_Medefaidrin },
+  { 2199, PT_SC, ucp_Meetei_Mayek },
+  { 2211, PT_SC, ucp_Mende_Kikakui },
+  { 2216, PT_SC, ucp_Mende_Kikakui },
+  { 2229, PT_SC, ucp_Meroitic_Cursive },
+  { 2234, PT_SCX, ucp_Meroitic_Hieroglyphs },
+  { 2239, PT_SC, ucp_Meroitic_Cursive },
+  { 2255, PT_SCX, ucp_Meroitic_Hieroglyphs },
+  { 2275, PT_SC, ucp_Miao },
+  { 2280, PT_SCX, ucp_Malayalam },
+  { 2285, PT_PC, ucp_Mn },
+  { 2288, PT_SCX, ucp_Modi },
+  { 2293, PT_BOOL, ucp_Modifier_Combining_Mark },
+  { 2315, PT_SCX, ucp_Mongolian },
+  { 2320, PT_SCX, ucp_Mongolian },
+  { 2330, PT_SC, ucp_Mro },
+  { 2334, PT_SC, ucp_Mro },
+  { 2339, PT_SC, ucp_Meetei_Mayek },
+  { 2344, PT_SCX, ucp_Multani },
+  { 2349, PT_SCX, ucp_Multani },
+  { 2357, PT_SCX, ucp_Myanmar },
+  { 2365, PT_SCX, ucp_Myanmar },
+  { 2370, PT_GC, ucp_N },
+  { 2372, PT_SC, ucp_Nabataean },
+  { 2382, PT_SC, ucp_Nag_Mundari },
+  { 2387, PT_SC, ucp_Nag_Mundari },
+  { 2398, PT_SCX, ucp_Nandinagari },
+  { 2403, PT_SCX, ucp_Nandinagari },
+  { 2415, PT_SC, ucp_Old_North_Arabian },
+  { 2420, PT_SC, ucp_Nabataean },
+  { 2425, PT_BOOL, ucp_Noncharacter_Code_Point },
+  { 2431, PT_PC, ucp_Nd },
+  { 2434, PT_SCX, ucp_Newa },
+  { 2439, PT_SC, ucp_New_Tai_Lue },
+  { 2449, PT_SCX, ucp_Nko },
+  { 2453, PT_SCX, ucp_Nko },
+  { 2458, PT_PC, ucp_Nl },
+  { 2461, PT_PC, ucp_No },
+  { 2464, PT_BOOL, ucp_Noncharacter_Code_Point },
+  { 2486, PT_SC, ucp_Nushu },
+  { 2491, PT_SC, ucp_Nushu },
+  { 2497, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
+  { 2518, PT_SC, ucp_Ogham },
+  { 2523, PT_SC, ucp_Ogham },
+  { 2529, PT_SC, ucp_Ol_Chiki },
+  { 2537, PT_SC, ucp_Ol_Chiki },
+  { 2542, PT_SCX, ucp_Old_Hungarian },
+  { 2555, PT_SC, ucp_Old_Italic },
+  { 2565, PT_SC, ucp_Old_North_Arabian },
+  { 2581, PT_SCX, ucp_Old_Permic },
+  { 2591, PT_SC, ucp_Old_Persian },
+  { 2602, PT_SC, ucp_Old_Sogdian },
+  { 2613, PT_SC, ucp_Old_South_Arabian },
+  { 2629, PT_SCX, ucp_Old_Turkic },
+  { 2639, PT_SCX, ucp_Old_Uyghur },
+  { 2649, PT_SCX, ucp_Ol_Onal },
+  { 2656, PT_SCX, ucp_Ol_Onal },
+  { 2661, PT_SCX, ucp_Oriya },
+  { 2667, PT_SCX, ucp_Old_Turkic },
+  { 2672, PT_SCX, ucp_Oriya },
+  { 2677, PT_SCX, ucp_Osage },
+  { 2683, PT_SCX, ucp_Osage },
+  { 2688, PT_SC, ucp_Osmanya },
+  { 2693, PT_SC, ucp_Osmanya },
+  { 2701, PT_SCX, ucp_Old_Uyghur },
+  { 2706, PT_GC, ucp_P },
+  { 2708, PT_SC, ucp_Pahawh_Hmong },
+  { 2720, PT_SC, ucp_Palmyrene },
+  { 2725, PT_SC, ucp_Palmyrene },
+  { 2735, PT_BOOL, ucp_Pattern_Syntax },
+  { 2742, PT_BOOL, ucp_Pattern_Syntax },
+  { 2756, PT_BOOL, ucp_Pattern_White_Space },
+  { 2774, PT_BOOL, ucp_Pattern_White_Space },
+  { 2780, PT_SC, ucp_Pau_Cin_Hau },
+  { 2785, PT_SC, ucp_Pau_Cin_Hau },
+  { 2795, PT_PC, ucp_Pc },
+  { 2798, PT_BOOL, ucp_Prepended_Concatenation_Mark },
+  { 2802, PT_PC, ucp_Pd },
+  { 2805, PT_PC, ucp_Pe },
+  { 2808, PT_SCX, ucp_Old_Permic },
+  { 2813, PT_PC, ucp_Pf },
+  { 2816, PT_SCX, ucp_Phags_Pa },
+  { 2821, PT_SCX, ucp_Phags_Pa },
+  { 2829, PT_SC, ucp_Inscriptional_Pahlavi },
+  { 2834, PT_SCX, ucp_Psalter_Pahlavi },
+  { 2839, PT_SC, ucp_Phoenician },
+  { 2844, PT_SC, ucp_Phoenician },
+  { 2855, PT_PC, ucp_Pi },
+  { 2858, PT_SC, ucp_Miao },
+  { 2863, PT_PC, ucp_Po },
+  { 2866, PT_BOOL, ucp_Prepended_Concatenation_Mark },
+  { 2893, PT_SC, ucp_Inscriptional_Parthian },
+  { 2898, PT_PC, ucp_Ps },
+  { 2901, PT_SCX, ucp_Psalter_Pahlavi },
+  { 2916, PT_SCX, ucp_Coptic },
+  { 2921, PT_SC, ucp_Inherited },
+  { 2926, PT_BOOL, ucp_Quotation_Mark },
+  { 2932, PT_BOOL, ucp_Quotation_Mark },
+  { 2946, PT_BOOL, ucp_Radical },
+  { 2954, PT_BOOL, ucp_Regional_Indicator },
+  { 2972, PT_SC, ucp_Rejang },
+  { 2979, PT_BOOL, ucp_Regional_Indicator },
+  { 2982, PT_SC, ucp_Rejang },
+  { 2987, PT_SCX, ucp_Hanifi_Rohingya },
+  { 2992, PT_SCX, ucp_Runic },
+  { 2998, PT_SCX, ucp_Runic },
+  { 3003, PT_GC, ucp_S },
+  { 3005, PT_SCX, ucp_Samaritan },
+  { 3015, PT_SCX, ucp_Samaritan },
+  { 3020, PT_SC, ucp_Old_South_Arabian },
+  { 3025, PT_SC, ucp_Saurashtra },
+  { 3030, PT_SC, ucp_Saurashtra },
+  { 3041, PT_PC, ucp_Sc },
+  { 3044, PT_BOOL, ucp_Soft_Dotted },
+  { 3047, PT_BOOL, ucp_Sentence_Terminal },
+  { 3064, PT_SC, ucp_SignWriting },
+  { 3069, PT_SCX, ucp_Sharada },
+  { 3077, PT_SCX, ucp_Shavian },
+  { 3085, PT_SCX, ucp_Shavian },
+  { 3090, PT_SCX, ucp_Sharada },
+  { 3095, PT_SC, ucp_Siddham },
+  { 3100, PT_SC, ucp_Siddham },
+  { 3108, PT_SC, ucp_Sidetic },
+  { 3116, PT_SC, ucp_Sidetic },
+  { 3121, PT_SC, ucp_SignWriting },
+  { 3133, PT_SCX, ucp_Khudawadi },
+  { 3138, PT_SCX, ucp_Sinhala },
+  { 3143, PT_SCX, ucp_Sinhala },
+  { 3151, PT_PC, ucp_Sk },
+  { 3154, PT_PC, ucp_Sm },
+  { 3157, PT_PC, ucp_So },
+  { 3160, PT_BOOL, ucp_Soft_Dotted },
+  { 3171, PT_SCX, ucp_Sogdian },
+  { 3176, PT_SCX, ucp_Sogdian },
+  { 3184, PT_SC, ucp_Old_Sogdian },
+  { 3189, PT_SC, ucp_Sora_Sompeng },
+  { 3194, PT_SC, ucp_Sora_Sompeng },
+  { 3206, PT_SC, ucp_Soyombo },
+  { 3211, PT_SC, ucp_Soyombo },
+  { 3219, PT_BOOL, ucp_White_Space },
+  { 3225, PT_BOOL, ucp_Sentence_Terminal },
+  { 3231, PT_SC, ucp_Sundanese },
+  { 3236, PT_SC, ucp_Sundanese },
+  { 3246, PT_SCX, ucp_Sunuwar },
+  { 3251, PT_SCX, ucp_Sunuwar },
+  { 3259, PT_SCX, ucp_Syloti_Nagri },
+  { 3264, PT_SCX, ucp_Syloti_Nagri },
+  { 3276, PT_SCX, ucp_Syriac },
+  { 3281, PT_SCX, ucp_Syriac },
+  { 3288, PT_SCX, ucp_Tagalog },
+  { 3296, PT_SCX, ucp_Tagbanwa },
+  { 3301, PT_SCX, ucp_Tagbanwa },
+  { 3310, PT_SCX, ucp_Tai_Le },
+  { 3316, PT_SC, ucp_Tai_Tham },
+  { 3324, PT_SC, ucp_Tai_Viet },
+  { 3332, PT_SC, ucp_Tai_Yo },
+  { 3338, PT_SCX, ucp_Takri },
+  { 3343, PT_SCX, ucp_Takri },
+  { 3349, PT_SCX, ucp_Tai_Le },
+  { 3354, PT_SC, ucp_New_Tai_Lue },
+  { 3359, PT_SCX, ucp_Tamil },
+  { 3365, PT_SCX, ucp_Tamil },
+  { 3370, PT_SCX, ucp_Tangut },
+  { 3375, PT_SC, ucp_Tangsa },
+  { 3382, PT_SCX, ucp_Tangut },
+  { 3389, PT_SC, ucp_Tai_Viet },
+  { 3394, PT_SC, ucp_Tai_Yo },
+  { 3399, PT_SCX, ucp_Telugu },
+  { 3404, PT_SCX, ucp_Telugu },
+  { 3411, PT_BOOL, ucp_Terminal_Punctuation },
+  { 3416, PT_BOOL, ucp_Terminal_Punctuation },
+  { 3436, PT_SCX, ucp_Tifinagh },
+  { 3441, PT_SCX, ucp_Tagalog },
+  { 3446, PT_SCX, ucp_Thaana },
+  { 3451, PT_SCX, ucp_Thaana },
+  { 3458, PT_SCX, ucp_Thai },
+  { 3463, PT_SCX, ucp_Tibetan },
+  { 3471, PT_SCX, ucp_Tibetan },
+  { 3476, PT_SCX, ucp_Tifinagh },
+  { 3485, PT_SCX, ucp_Tirhuta },
+  { 3490, PT_SCX, ucp_Tirhuta },
+  { 3498, PT_SC, ucp_Tangsa },
+  { 3503, PT_SCX, ucp_Todhri },
+  { 3510, PT_SCX, ucp_Todhri },
+  { 3515, PT_SC, ucp_Tolong_Siki },
+  { 3526, PT_SC, ucp_Tolong_Siki },
+  { 3531, PT_SCX, ucp_Toto },
+  { 3536, PT_SCX, ucp_Tulu_Tigalari },
+  { 3549, PT_SCX, ucp_Tulu_Tigalari },
+  { 3554, PT_SC, ucp_Ugaritic },
+  { 3559, PT_SC, ucp_Ugaritic },
+  { 3568, PT_BOOL, ucp_Unified_Ideograph },
+  { 3574, PT_BOOL, ucp_Unified_Ideograph },
+  { 3591, PT_SC, ucp_Unknown },
+  { 3599, PT_BOOL, ucp_Uppercase },
+  { 3605, PT_BOOL, ucp_Uppercase },
+  { 3615, PT_SC, ucp_Vai },
+  { 3619, PT_SC, ucp_Vai },
+  { 3624, PT_BOOL, ucp_Variation_Selector },
+  { 3642, PT_SC, ucp_Vithkuqi },
+  { 3647, PT_SC, ucp_Vithkuqi },
+  { 3656, PT_BOOL, ucp_Variation_Selector },
+  { 3659, PT_SC, ucp_Wancho },
+  { 3666, PT_SC, ucp_Warang_Citi },
+  { 3671, PT_SC, ucp_Warang_Citi },
+  { 3682, PT_SC, ucp_Wancho },
+  { 3687, PT_BOOL, ucp_White_Space },
+  { 3698, PT_BOOL, ucp_White_Space },
+  { 3705, PT_ALNUM, 0 },
+  { 3709, PT_BOOL, ucp_XID_Continue },
+  { 3714, PT_BOOL, ucp_XID_Continue },
+  { 3726, PT_BOOL, ucp_XID_Start },
+  { 3731, PT_BOOL, ucp_XID_Start },
+  { 3740, PT_SC, ucp_Old_Persian },
+  { 3745, PT_PXSPACE, 0 },
+  { 3749, PT_SPACE, 0 },
+  { 3753, PT_SC, ucp_Cuneiform },
+  { 3758, PT_UCNC, 0 },
+  { 3762, PT_WORD, 0 },
+  { 3766, PT_SCX, ucp_Yezidi },
+  { 3771, PT_SCX, ucp_Yezidi },
+  { 3778, PT_SCX, ucp_Yi },
+  { 3781, PT_SCX, ucp_Yi },
+  { 3786, PT_GC, ucp_Z },
+  { 3788, PT_SC, ucp_Zanabazar_Square },
+  { 3804, PT_SC, ucp_Zanabazar_Square },
+  { 3809, PT_SC, ucp_Inherited },
+  { 3814, PT_PC, ucp_Zl },
+  { 3817, PT_PC, ucp_Zp },
+  { 3820, PT_PC, ucp_Zs },
+  { 3823, PT_SC, ucp_Common },
+  { 3828, PT_SC, ucp_Unknown }
 };
 
 const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);
index 705e15f5dcb08e17a8db20aa6be5ab0ccbca0511..613b350864100b6366fea058525807c1d36a77a1 100644 (file)
@@ -593,7 +593,7 @@ static char *
 parse_grep_colors(const char *gc)
 {
 static char seq[16];
-char *col;
+const char *col;
 uint32_t len;
 if (gc == NULL) return NULL;
 col = strstr(gc, "ms=");
@@ -966,7 +966,7 @@ WIN32_FIND_DATA data;
 
 #define FILESEP '/'
 
-int
+static int
 isdirectory(char *filename)
 {
 DWORD attr = GetFileAttributes(filename);
@@ -975,7 +975,7 @@ if (attr == INVALID_FILE_ATTRIBUTES)
 return (attr & FILE_ATTRIBUTE_DIRECTORY) != 0;
 }
 
-directory_type *
+static directory_type *
 opendirectory(char *filename)
 {
 size_t len;
@@ -1009,7 +1009,7 @@ errno = (err == ERROR_ACCESS_DENIED) ? EACCES : ENOENT;
 return NULL;
 }
 
-char *
+static char *
 readdirectory(directory_type *dir)
 {
 for (;;)
@@ -1031,7 +1031,7 @@ return NULL;   /* Keep compiler happy; never executed */
 #endif
 }
 
-void
+static void
 closedirectory(directory_type *dir)
 {
 FindClose(dir->handle);
@@ -1044,7 +1044,7 @@ free(dir);
 /* I don't know how to do this, or if it can be done; assume all paths are
 regular if they are not directories. */
 
-int isregfile(char *filename)
+static int isregfile(char *filename)
 {
 return !isdirectory(filename);
 }
@@ -1096,17 +1096,17 @@ if (do_colour)
 #define FILESEP 0
 typedef void directory_type;
 
-int isdirectory(char *filename) { return 0; }
-directory_type * opendirectory(char *filename) { return (directory_type*)0;}
-char *readdirectory(directory_type *dir) { return (char*)0;}
-void closedirectory(directory_type *dir) {}
+static int isdirectory(char *filename) { return 0; }
+static directory_type * opendirectory(char *filename) { return (directory_type*)0;}
+static char *readdirectory(directory_type *dir) { return (char*)0;}
+static void closedirectory(directory_type *dir) {}
 
 
 /************* Test for regular file when we can't do it **********/
 
 /* Assume all files are regular. */
 
-int isregfile(char *filename) { return 1; }
+static int isregfile(char *filename) { return 1; }
 
 
 /************* Test for a terminal when we can't do it **********/
@@ -1309,7 +1309,7 @@ if (*endptr != 0)   /* Error */
   {
   if (longop)
     {
-    char *equals = strchr(op->long_name, '=');
+    const char *equals = strchr(op->long_name, '=');
     int nlen = (equals == NULL)? (int)strlen(op->long_name) :
       (int)(equals - op->long_name);
     fprintf(stderr, "pcre2grep: Malformed number \"%s\" after --%.*s\n",
@@ -2208,12 +2208,25 @@ for (; *string != 0; string++)
       case DDE_CAPTURE:
       if (value < capture_top)
         {
-        PCRE2_SIZE capturesize;
+        PCRE2_SIZE capturesize, start, end;
         value *= 2;
-        capturesize = ovector[value + 1] - ovector[value];
+        start = ovector[value];
+        end = ovector[value + 1];
+
+        /* The use of \K may make the end offset earlier than the start. In
+        this situation, swap them round. */
+
+        if (start > end)
+          {
+          PCRE2_SIZE temp = start;
+          start = end;
+          end = temp;
+          }
+
+        capturesize = end - start;
         if (capturesize > 0)
           {
-          print_match(subject + ovector[value], capturesize);
+          print_match(subject + start, capturesize);
           printed = TRUE;
           }
         }
@@ -2353,7 +2366,12 @@ while (length > 0)
       if (value < capture_top)
         {
         value *= 2;
-        argslen += ovector[value + 1] - ovector[value];
+
+        /* The use of \K may make the end offset earlier than the start. */
+
+        argslen += (ovector[value + 1] > ovector[value])?
+          ovector[value + 1] - ovector[value] :
+          ovector[value] - ovector[value + 1];
         }
       argslen--;   /* Negate the effect of argslen++ below. */
       break;
@@ -2419,10 +2437,23 @@ while (length > 0)
       case DDE_CAPTURE:
       if (value < capture_top)
         {
-        PCRE2_SIZE capturesize;
+        PCRE2_SIZE capturesize, start, end;
         value *= 2;
-        capturesize = ovector[value + 1] - ovector[value];
-        memcpy(argsptr, subject + ovector[value], capturesize);
+        start = ovector[value];
+        end = ovector[value + 1];
+
+        /* The use of \K may make the end offset earlier than the start. In
+        this situation, swap them round. */
+
+        if (start > end)
+          {
+          PCRE2_SIZE temp = start;
+          start = end;
+          end = temp;
+          }
+
+        capturesize = end - start;
+        memcpy(argsptr, subject + start, capturesize);
         argsptr += capturesize;
         }
       break;
@@ -2847,18 +2878,28 @@ while (ptr < endptr)
           printname_colon);
         if (number) fprintf(stdout, "%lu:", linenumber);
 
-        /* Handle --line-offsets */
+        /* Handle --line-offsets and --file-offsets. The use of \K may make
+        the end offset earlier than the start. In this situation, swap them
+        round. */
 
-        if (line_offsets)
-          fprintf(stdout, "%d,%d" STDOUT_NL, (int)(ptr + offsets[0] - ptr),
-            (int)(offsets[1] - offsets[0]));
+        if (line_offsets || file_offsets)
+          {
+          PCRE2_SIZE start = offsets[0];
+          PCRE2_SIZE end = offsets[1];
 
-        /* Handle --file-offsets */
+          if (start > end)
+            {
+            PCRE2_SIZE temp = start;
+            start = end;
+            end = temp;
+            }
 
-        else if (file_offsets)
-          fprintf(stdout, "%d,%d" STDOUT_NL,
-            (int)(filepos + ptr + offsets[0] - ptr),
-            (int)(offsets[1] - offsets[0]));
+          if (line_offsets)
+            fprintf(stdout, "%d,%d" STDOUT_NL, (int)start, (int)(end - start));
+          else
+            fprintf(stdout, "%d,%d" STDOUT_NL, (int)(filepos + start),
+              (int)(end - start));
+          }
 
         /* Handle --output (which has already been syntax checked) */
 
@@ -2881,12 +2922,26 @@ while (ptr < endptr)
             int n = om->groupnum;
             if (n == 0 || n < mrc)
               {
-              size_t plen = offsets[2*n + 1] - offsets[2*n];
+              PCRE2_SIZE start = offsets[2*n];
+              PCRE2_SIZE end = offsets[2*n + 1];
+              size_t plen;
+
+              /* The use of \K may make the end offset earlier than the start.
+              In this situation, swap them round. */
+
+              if (start > end)
+                {
+                PCRE2_SIZE temp = start;
+                start = end;
+                end = temp;
+                }
+
+              plen = end - start;
               if (plen > 0)
                 {
                 if (printed && om_separator != NULL)
                   fprintf(stdout, "%s", om_separator);
-                print_match(ptr + offsets[n*2], plen);
+                print_match(ptr + start, plen);
                 printed = TRUE;
                 }
               }
@@ -2910,16 +2965,18 @@ while (ptr < endptr)
         oldstartoffset = pcre2_get_startchar(match_data);
         if (startoffset <= oldstartoffset)
           {
-          if (startoffset >= length) goto END_ONE_MATCH;  /* Were at end */
+          if (oldstartoffset >= length) goto END_ONE_MATCH;  /* We're at end */
           startoffset = oldstartoffset + 1;
-          if (utf) while ((ptr[startoffset] & 0xc0) == 0x80) startoffset++;
+          if (utf) while (startoffset < length &&
+                          (ptr[startoffset] & 0xc0) == 0x80) startoffset++;
           }
 
         /* If the current match ended past the end of the line (only possible
         in multiline mode), we must move on to the line in which it did end
-        before searching for more matches. */
+        before searching for more matches. An offset that is within a line's
+        terminating CRLF sequence still belongs to that line. */
 
-        while (startoffset > linelength)
+        while (endlinelength != 0 && startoffset >= linelength + endlinelength)
           {
           ptr += linelength + endlinelength;
           filepos += (int)(linelength + endlinelength);
@@ -3080,8 +3137,10 @@ while (ptr < endptr)
 
           if (startoffset <= oldstartoffset)
             {
+            if (oldstartoffset >= length) break;  /* We're at end */
             startoffset = oldstartoffset + 1;
-            if (utf) while ((ptr[startoffset] & 0xc0) == 0x80) startoffset++;
+            if (utf) while (startoffset < length &&
+                            (ptr[startoffset] & 0xc0) == 0x80) startoffset++;
             }
 
           /* If the current match ended past the end of the line (only possible
@@ -3092,11 +3151,20 @@ while (ptr < endptr)
 
           while (startoffset > linelength + endlinelength)
             {
-            ptr += linelength + endlinelength;
-            filepos += (int)(linelength + endlinelength);
+            PCRE2_SIZE lineadvance = linelength + endlinelength;
+
+            if (endprevious < lineadvance)
+              {
+              FWRITE_IGNORE(ptr + endprevious, 1,
+                lineadvance - endprevious, stdout);
+              endprevious = 0;
+              }
+            else endprevious -= lineadvance;
+
+            ptr += lineadvance;
+            filepos += (int)lineadvance;
             linenumber++;
-            startoffset -= (int)(linelength + endlinelength);
-            endprevious -= (int)(linelength + endlinelength);
+            startoffset -= lineadvance;
             t = end_of_line(ptr, endptr, &endlinelength);
             linelength = t - ptr - endlinelength;
             length = (PCRE2_SIZE)(endptr - ptr);
@@ -3944,6 +4012,7 @@ main(int argc, char **argv)
 int i, j;
 int rc = 1;
 BOOL only_one_at_top;
+BOOL options_terminated = FALSE;
 patstr *cp;
 fnstr *fn;
 omstr *om;
@@ -3992,6 +4061,7 @@ for (i = 1; i < argc; i++)
 
     if (*arg == 0)    /* -- terminates options */
       {
+      options_terminated = TRUE;
       i++;
       break;                /* out of the options-handling loop */
       }
@@ -4007,8 +4077,8 @@ for (i = 1; i < argc; i++)
 
     for (op = optionlist; op->one_char != 0; op++)
       {
-      char *opbra = strchr(op->long_name, '(');
-      char *equals = strchr(op->long_name, '=');
+      const char *opbra = strchr(op->long_name, '(');
+      const char *equals = strchr(op->long_name, '=');
 
       /* Handle options with only one spelling of the name */
 
@@ -4261,6 +4331,23 @@ for (i = 1; i < argc; i++)
     }
   }
 
+/* GNU grep also recognizes -- after positional arguments. If option parsing
+has not already been terminated, remove the first such delimiter. */
+
+if (!options_terminated)
+  {
+  for (j = i; j < argc; j++)
+    {
+    if (strcmp(argv[j], "--") == 0)
+      {
+      /* Move the (argc - j - 1) remaining arguments and the terminating NULL */
+      memmove(argv + j, argv + j + 1, (argc - j) * sizeof(*argv));
+      argc--;
+      break;
+      }
+    }
+  }
+
 /* Options have been decoded. If -C was used, its value is used as a default
 for -A and -B. */
 
index 3242b5ce73e766959af46767aff84b0e6ba4bb77..e8b6b14d8614a9b837ad1e217964553f005ac7de 100644 (file)
@@ -150,8 +150,10 @@ patterns. */
 /* Not Windows */
 
 #else
+#ifdef HAVE_SETRLIMIT
 #include <sys/time.h>          /* These two includes are needed */
 #include <sys/resource.h>      /* for setrlimit(). */
+#endif
 #if defined NATIVE_ZOS         /* z/OS uses non-binary I/O */
 #define INPUT_MODE   "r"
 #define OUTPUT_MODE  "w"
@@ -227,7 +229,6 @@ claim to be C99 don't support it (hence DISABLE_PERCENT_ZT). */
 #define PATSTACKSIZE 20           /* Pattern stack for save/restore testing */
 #define REPLACE_MODSIZE 100       /* Field for reading 8-bit replacement */
 #define SUBSTITUTE_SUBJECT_MODSIZE 100 /* Field for reading 8-bit subject for substitute */
-#define VERSION_SIZE 64           /* Size of buffer for the version strings */
 #define REPLACE_BUFFSIZE 256      /* Code units for replacement buffer */
 
 /* Default JIT compile options */
@@ -2025,12 +2026,23 @@ for (;;)
     char promptbuf[80];
     int snprintf_rc;
     char *s;
-    if (should_print_colour(clr_prompt, stdout) &&
-        (snprintf_rc = snprintf(promptbuf, sizeof(promptbuf), "\x1b[%dm%s\x1b[0m", clr_prompt, prompt)) > 0 &&
-        snprintf_rc < (int)sizeof(promptbuf))
-      s = readline(promptbuf);
+    if (should_print_colour(clr_prompt, stdout))
+      /* libedit cannot handle ANSI escapes as the final character of a prompt,
+      so we ensure a trailing space comes after the last escape. */
+      snprintf_rc = snprintf(promptbuf, sizeof(promptbuf),
+                             "%c\x1b[%dm%c%s%c\x1b[0m%c ",
+                             RL_PROMPT_START_IGNORE, clr_prompt,
+                             RL_PROMPT_END_IGNORE, prompt,
+                             RL_PROMPT_START_IGNORE,
+                             RL_PROMPT_END_IGNORE);
     else
-      s = readline(prompt);
+      snprintf_rc = snprintf(promptbuf, sizeof(promptbuf), "%s ", prompt);
+    if (snprintf_rc <= 0 || snprintf_rc >= (int)sizeof(promptbuf))
+      {
+      cfprintf(clr_test_error, outfile, "** Interactive prompt exceeds buffer space\n");
+      exit(1);
+      }
+    s = readline(promptbuf);
     if (s == NULL) return (here == start)? NULL : start;
     dlen = strlen(s);
     if (dlen > rlen - 2)
@@ -2942,9 +2954,9 @@ static int pcre2_config(uint32_t what, void *where)
 DISPATCH(return, pcre2_config_, (what, where));
 }
 
-static void config_str(uint32_t what, char *where)
+static char *config_str(uint32_t what)
 {
-DISPATCH(, config_str_, (what, where));
+DISPATCH(return, config_str_, (what));
 }
 
 static BOOL decode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl)
@@ -3013,14 +3025,14 @@ DISPATCH(, unittest_, ());
 static void
 print_version(FILE *f, BOOL include_mode)
 {
-char buf[VERSION_SIZE];
-config_str(PCRE2_CONFIG_VERSION, buf);
+char *buf = config_str(PCRE2_CONFIG_VERSION);
 fprintf(f, "PCRE2 version %s", buf);
 if (include_mode)
   {
   fprintf(f, " (%d-bit)", test_mode);
   }
 fprintf(f, "\n");
+free(buf);
 }
 
 
@@ -3032,9 +3044,9 @@ fprintf(f, "\n");
 static void
 print_unicode_version(FILE *f)
 {
-char buf[VERSION_SIZE];
-config_str(PCRE2_CONFIG_UNICODE_VERSION, buf);
+char *buf = config_str(PCRE2_CONFIG_UNICODE_VERSION);
 fprintf(f, "Unicode version %s", buf);
+free(buf);
 }
 
 
@@ -3046,9 +3058,9 @@ fprintf(f, "Unicode version %s", buf);
 static void
 print_jit_target(FILE *f)
 {
-char buf[VERSION_SIZE];
-config_str(PCRE2_CONFIG_JITTARGET, buf);
+char *buf = config_str(PCRE2_CONFIG_JITTARGET);
 fputs(buf, f);
+free(buf);
 }
 
 
@@ -3634,6 +3646,218 @@ display_selected_modifiers(FALSE, "SUBJECT");
 
 
 
+/*************************************************
+*        Helpers for the grep test scripts       *
+*************************************************/
+
+/* RunGrepTest and RunGrepTest.bat have to create input files that contain
+exact byte sequences, including bytes that cannot start a UTF-8 character, and
+they also have to filter a stream, changing one byte value into another. On
+Unix-like systems printf(1) and tr(1) do this, but Windows has no dependable
+equivalent: the obvious candidates all translate what they write according to
+the current code page, which mangles any byte greater than 0x7f. As both
+scripts are checked against the same expected output, they need the same
+facilities, so these options provide just enough of printf and tr for
+RunGrepTest.bat to produce exactly the same bytes as RunGrepTest does.
+
+They are needed only by RunGrepTest.bat, so they are built only on Windows.
+They are deliberately undocumented, are not part of pcre2test's interface, and
+may change whenever the test scripts need something different. */
+
+#if defined(_WIN32) || defined(WIN32)
+
+/* Standard input and output are put into binary mode, because the Windows
+default is to turn every LF that passes through into CRLF. */
+
+static void
+helper_binary_io(void)
+{
+_setmode(_fileno(stdin), _O_BINARY);
+_setmode(_fileno(stdout), _O_BINARY);
+}
+
+
+/* Decode an argument that represents a single byte, either as itself or as a
+backslash followed by up to three octal digits. The result is the byte value,
+or -1 if the argument is not one of those things. */
+
+static int
+helper_byte(const char *s)
+{
+if (s[0] == '\\' && s[1] >= '0' && s[1] <= '7')
+  {
+  int value = 0;
+  int i = 0;
+  int n = 0;
+  while (n < 3 && s[i+1] >= '0' && s[i+1] <= '7')
+    {
+    value = value * 8 + (s[++i] - '0');
+    n++;
+    }
+  return (s[i+1] == 0 && value <= 255)? value : -1;
+  }
+
+return (s[0] != 0 && s[1] == 0)? (unsigned char)s[0] : -1;
+}
+
+
+/* Write the format argument to the standard output, interpreting the escape
+sequences that the test scripts use, and replacing every occurrence of %s with
+the second argument. The escapes are \n, \r, \\ and an octal escape of up to
+three digits. Anything else is written out unchanged, backslash and all, but
+the scripts should not rely on that: a literal backslash, as in a Windows file
+name, is written as \\ so that the format does not depend on which escapes
+happen to be implemented here. */
+
+static int
+helper_printf(int argc, char **argv)
+{
+const char *fmt;
+const char *arg;
+size_t i;
+
+if (argc < 1)
+  {
+  fprintf(stderr, "pcre2test: -printf needs a format argument\n");
+  return 1;
+  }
+
+fmt = argv[0];
+arg = (argc > 1)? argv[1] : "";
+
+helper_binary_io();
+
+for (i = 0; fmt[i] != 0; i++)
+  {
+  if (fmt[i] == '%' && fmt[i+1] == 's')
+    {
+    fputs(arg, stdout);
+    i++;
+    }
+
+  /* An octal escape of up to three digits, so that \0 gives a binary zero and
+  \200 gives a byte that cannot start a UTF-8 character. */
+
+  else if (fmt[i] == '\\' && fmt[i+1] >= '0' && fmt[i+1] <= '7')
+    {
+    int value = 0;
+    int n = 0;
+    while (n < 3 && fmt[i+1] >= '0' && fmt[i+1] <= '7')
+      {
+      value = value * 8 + (fmt[++i] - '0');
+      n++;
+      }
+    if (value > 255)
+      {
+      fprintf(stderr, "pcre2test: -printf octal escape is greater than \\377\n");
+      return 1;
+      }
+    fputc(value, stdout);
+    }
+
+  else if (fmt[i] == '\\' && fmt[i+1] == 'n') { fputc('\n', stdout); i++; }
+  else if (fmt[i] == '\\' && fmt[i+1] == 'r') { fputc('\r', stdout); i++; }
+  else if (fmt[i] == '\\' && fmt[i+1] == '\\') { fputc('\\', stdout); i++; }
+  else fputc(fmt[i], stdout);
+  }
+
+if (fflush(stdout) != 0)
+  {
+  fprintf(stderr, "pcre2test: -printf write failed: %s\n", strerror(errno));
+  return 1;
+  }
+
+return 0;
+}
+
+
+/* Copy the standard input to the standard output, changing every occurrence of
+one byte value into another. Both bytes are given in the form that helper_byte()
+accepts. */
+
+static int
+helper_tr(int argc, char **argv)
+{
+int from, to, c;
+
+if (argc < 2)
+  {
+  fprintf(stderr, "pcre2test: -tr needs two arguments\n");
+  return 1;
+  }
+
+from = helper_byte(argv[0]);
+to = helper_byte(argv[1]);
+
+if (from < 0 || to < 0)
+  {
+  fprintf(stderr, "pcre2test: -tr arguments must each be a single byte\n");
+  return 1;
+  }
+
+helper_binary_io();
+
+while ((c = getchar()) != EOF) putchar((c == from)? to : c);
+
+if (ferror(stdin) || fflush(stdout) != 0)
+  {
+  fprintf(stderr, "pcre2test: -tr copy failed: %s\n", strerror(errno));
+  return 1;
+  }
+
+return 0;
+}
+
+
+
+/* Copy the standard input to the standard output, changing every occurrence of
+the three bytes CR, CR, LF into the two bytes CR, LF.
+
+pcre2grep ends each line that it writes with STDOUT_NL, which is CRLF on
+Windows but LF elsewhere, so a line whose own text ends with CR comes out as
+CR CR LF on Windows and as CR LF everywhere else. Comparison normally copes
+with the difference between the two line endings, but not with the extra CR
+that this case produces. Both test scripts are checked against the same
+expected output, so RunGrepTest.bat passes the output of the few tests that
+match a CR at the end of a line through this, and leaves everything else alone.
+A run of CRs that is not at the end of a line is not touched, so a CR that the
+pattern matched in the middle of a line still shows up. */
+
+static int
+helper_fixcrlf(void)
+{
+unsigned long crcount = 0;
+int c;
+
+helper_binary_io();
+
+while ((c = getchar()) != EOF)
+  {
+  if (c == '\r') { crcount++; continue; }
+
+  /* A run of CRs that ends the line has one CR removed; any other run is
+  written out unchanged. */
+
+  if (c == '\n' && crcount >= 2) crcount--;
+  while (crcount > 0) { putchar('\r'); crcount--; }
+  putchar(c);
+  }
+
+while (crcount > 0) { putchar('\r'); crcount--; }
+
+if (ferror(stdin) || fflush(stdout) != 0)
+  {
+  fprintf(stderr, "pcre2test: -fixcrlf copy failed: %s\n", strerror(errno));
+  return 1;
+  }
+
+return 0;
+}
+
+#endif  /* Windows */
+
+
+
 /*************************************************
 *                Main Program                    *
 *************************************************/
@@ -3651,6 +3875,19 @@ BOOL skipping_endif = FALSE;
 char *arg_subject = NULL;
 char *arg_pattern = NULL;
 char *arg_error = NULL;
+char *env_no_color = getenv("NO_COLOR");
+
+/* The undocumented helpers for the grep test scripts do none of the work that
+follows, so deal with them before anything is set up. */
+
+#if defined(_WIN32) || defined(WIN32)
+if (argc > 2 && strcmp(argv[1], "-printf") == 0)
+  return helper_printf(argc - 2, argv + 2);
+if (argc > 2 && strcmp(argv[1], "-tr") == 0)
+  return helper_tr(argc - 2, argv + 2);
+if (argc == 2 && strcmp(argv[1], "-fixcrlf") == 0)
+  return helper_fixcrlf();
+#endif
 
 /* Get buffers from malloc() so that valgrind will check their misuse when
 debugging. They grow automatically when very long lines are read. The 16-
@@ -3675,6 +3912,9 @@ locale_name[0] = 0;
 patctl_zero(&def_patctl);
 datctl_zero(&def_datctl);
 
+if (env_no_color != NULL && strlen(env_no_color) > 0)
+  colour_setting = COLOUR_NEVER;
+
 /* Scan command line options. */
 
 while (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0)
@@ -3773,7 +4013,12 @@ while (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0)
   else if (strcmp(arg, "-S") == 0 && argc > 2 &&
       ((uli = strtoul(argv[op+1], &endptr, 10)), *endptr == 0))
     {
-#if defined(_WIN32) || defined(WIN32) || defined(__HAIKU__) || defined(NATIVE_ZOS) || defined(__VMS)
+    /* On Win32, we exclude setrlimit() regardless of whether it may have been detected
+    due to some Unix emulation environment. On Haiku and z/OS, setrlimit() is reported
+    to be detected (with the function linking successfully and RLIMIT_STACK defined in
+    the headers), but it does not actually work, so we exclude it as well. */
+#if defined(_WIN32) || defined(WIN32) || !defined(HAVE_SETRLIMIT) || \
+  defined(__HAIKU__) || defined(NATIVE_ZOS)
     cfprintf(clr_test_error, stderr, "pcre2test: -S is not supported on this OS\n");
     exit(1);
 #else
@@ -4059,7 +4304,7 @@ while (notdone)
   expectdata |= preg.re_pcre2_code != NULL;
 #endif
 
-  if (extend_inputline(infile, buffer, expectdata? "data> " : "  re> ") == NULL)
+  if (extend_inputline(infile, buffer, expectdata? "data>" : "  re>") == NULL)
     break;
 
   /* Pre-process input lines with #if...#endif. */
index 8124e9ca6c7ea2c010955d23e63cb0dc3b0aa4de..69c64f73193243576f3825dd2cbc010c2d54c2b1 100644 (file)
@@ -558,24 +558,47 @@ return 0;
 
 Arguments:
   what       the item to read
-  where      the 8-bit buffer to receive the string
+
+Returns:     a buffer which must be freed by the caller, where the string has
+             been written
 */
 
-static void
-config_str(uint32_t what, char *where)
+static char *
+config_str(uint32_t what)
 {
-int r1, r2;
-PCRE2_UCHAR buf[VERSION_SIZE];
+int r2;
+PCRE2_UCHAR *buf;
+char *buf8;
+int needed_len;
 
-r1 = pcre2_config(what, NULL);
-r2 = pcre2_config(what, buf);
-if (r1 < 0 || r1 != r2 || r1 >= VERSION_SIZE)
+needed_len = pcre2_config(what, NULL);
+if (needed_len <= 0)
   {
   cfprintf(clr_test_error, stderr, "pcre2test: Error in pcre2_config(%d)\n", what);
   exit(1);
   }
 
-while (r1-- > 0) where[r1] = (char)buf[r1];
+buf = malloc((unsigned)needed_len * sizeof(PCRE2_UCHAR));
+buf8 = malloc((unsigned)needed_len);
+if (buf == NULL || buf8 == NULL)
+  {
+  cfprintf(clr_test_error, stderr, "pcre2test: malloc failed in config_str()\n");
+  exit(1);
+  }
+
+r2 = pcre2_config(what, buf);
+if (r2 != needed_len)
+  {
+  cfprintf(clr_test_error, stderr,
+    "pcre2test: pcre2_config(%d) returned %d, expected %d\n",
+    what, r2, needed_len);
+  exit(1);
+  }
+
+while (r2-- > 0) buf8[r2] = (char)buf[r2];
+free(buf);
+
+return buf8;
 }
 
 
@@ -1028,13 +1051,18 @@ for (;;)
     break;
 
     case MOD_STR:
+    if (m->value > (uint32_t)(UINT8_MAX) + 1)
+      {
+      cfprintf(clr_test_error, stderr, "pcre2test: mod %s size > 256 \n", m->name);
+      exit(1);
+      }
     if (len + 1 > m->value)
       {
       cfprintf(clr_test_error, outfile, "** Overlong value for \"%s\" (max %d code units)\n",
         m->name, m->value - 1);
       return FALSE;
       }
-    ((uint8_t *)field)[0] = len;
+    ((uint8_t *)field)[0] = (uint8_t)len;  /* len <= m->value - 1 <= UINT8_MAX */
     memcpy(((uint8_t *)field)+1, pp, len);
     ((uint8_t *)field)[len+1] = 0;
     pp = ep;
@@ -1684,7 +1712,7 @@ process_command(void)
 FILE *f;
 PCRE2_SIZE serial_size;
 size_t i;
-int rc, cmd, yield;
+int rc, cmd, yield, config_value;
 uint16_t first_listed_newline;
 const char *cmdname;
 size_t cmdlen;
@@ -1952,7 +1980,7 @@ switch(cmd)
     {
     size_t optlen = strlen(coptlist[i].name);
     const uint8_t *argptr_trail;
-    if (coptlist[i].type != CONF_FIX)
+    if (coptlist[i].type != CONF_FIX && coptlist[i].type != CONF_INT)
       continue;
     if (strncmp((const char*)argptr, coptlist[i].name, optlen) != 0)
       continue;
@@ -1967,9 +1995,20 @@ switch(cmd)
     return PR_ABEND;
     }
 
-  /* Condition FALSE - skip this line and everything until #endif. */
-  if ((coptlist[i].value != 0) == if_inverted)
+  if (coptlist[i].type == CONF_FIX)
+    {
+    config_value = coptlist[i].value;
+    }
+  else /* if (coptlist[i].type == CONF_INT) */
+    {
+    (void)pcre2_config(coptlist[i].value, &config_value);
+    }
+
+  if ((config_value != 0) == if_inverted)
+    {
+    /* Condition FALSE - skip this line and everything until #endif. */
     yield = PR_ENDIF;
+    }
 
   inside_if = TRUE;
   break;
@@ -2019,6 +2058,9 @@ uint32_t use_forbid_utf = forbid_utf;
 PCRE2_SIZE patlen, full_patlen;
 PCRE2_SIZE valgrind_access_length;
 PCRE2_SIZE erroroffset;
+int32_t serialize_rc;
+uint8_t *serialized_bytes;
+PCRE2_SIZE serialized_size;
 
 /* The perltest.sh script supports only / as a delimiter. */
 
@@ -2966,6 +3008,28 @@ if ((pat_patctl.control2 & CTL2_NL_SET) != 0)
 rc = show_pattern_info();
 if (rc != PR_OK) return rc;
 
+/* Verify that the compiled structure can be serialized without generating
+memory errors. */
+
+serialize_rc = pcre2_serialize_encode((const pcre2_code **)&compiled_code, 1,
+  &serialized_bytes, &serialized_size, general_context);
+if (serialize_rc != 1)
+  {
+  cfprintf(clr_test_error, outfile, "** pcre2_serialize_encode() returned %d instead of 1\n",
+    serialize_rc);
+  return PR_ABEND;
+  }
+
+#if defined SUPPORT_VALGRIND
+if (VALGRIND_CHECK_MEM_IS_DEFINED(serialized_bytes, serialized_size) != 0)
+  {
+  cfprintf(clr_test_error, outfile, "** pcre2_serialize_encode() returned undefined data\n");
+  return PR_ABEND;
+  }
+#endif
+
+pcre2_serialize_free(serialized_bytes);
+
 /* The "push" control requests that the compiled pattern be remembered on a
 stack. This is mainly for testing the serialization functionality. */
 
@@ -3101,7 +3165,8 @@ for (;;)
       dat_context, dfa_workspace, DFA_WS_DIMENSION);
     }
 
-  else if ((pat_patctl.control & CTL_JITFAST) != 0)
+  else if ((pat_patctl.control & CTL_JITFAST) != 0 &&
+           (dat_datctl.options & PCRE2_NO_JIT) == 0)
     capcount = pcre2_jit_match(compiled_code, pp, ulen, dat_datctl.offset,
       dat_datctl.options, match_data, dat_context);
 
@@ -4683,7 +4748,8 @@ if (dat_datctl.replacement[0] != MOD_STR_UNSET)
         dat_datctl.offset, dat_datctl.options, match_data,
         use_dat_context, dfa_workspace, DFA_WS_DIMENSION);
       }
-    else if ((pat_patctl.control & CTL_JITFAST) != 0)
+    else if ((pat_patctl.control & CTL_JITFAST) != 0 &&
+             (dat_datctl.options & PCRE2_NO_JIT) == 0)
       {
       (void)pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset,
         dat_datctl.options, match_data, use_dat_context);
@@ -4926,7 +4992,7 @@ for (gmatched = 0;; gmatched++)
   /* When matching is via pcre2_match(), we will detect the use of JIT via the
   stack callback function. */
 
-  jit_was_used = (pat_patctl.control & CTL_JITFAST) != 0;
+  jit_was_used = FALSE;
 
   /* Do timing if required. */
 
@@ -4957,7 +5023,8 @@ for (gmatched = 0;; gmatched++)
         }
       }
 
-    else if ((pat_patctl.control & CTL_JITFAST) != 0)
+    else if ((pat_patctl.control & CTL_JITFAST) != 0 &&
+             (dat_datctl.options & PCRE2_NO_JIT) == 0)
       {
       start_time = clock();
       for (i = 0; i < timeitm; i++)
@@ -5041,9 +5108,11 @@ for (gmatched = 0;; gmatched++)
       }
     else
       {
-      if ((pat_patctl.control & CTL_JITFAST) != 0)
-        capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset,
-          dat_datctl.options | g_notempty, match_data, use_dat_context);
+      if ((pat_patctl.control & CTL_JITFAST) != 0 &&
+          (dat_datctl.options & PCRE2_NO_JIT) == 0)
+        capcount = pcre2_jit_match(compiled_code, pp, arg_ulen,
+          dat_datctl.offset, dat_datctl.options | g_notempty, match_data,
+          use_dat_context);
       else
         capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset,
           dat_datctl.options | g_notempty, match_data, use_dat_context);
@@ -5078,12 +5147,15 @@ for (gmatched = 0;; gmatched++)
           }
         else
           {
-          if ((pat_patctl.control & CTL_JITFAST) != 0)
-            capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset,
-              dat_datctl.options | g_notempty, match_data, use_dat_context);
+          if ((pat_patctl.control & CTL_JITFAST) != 0 &&
+              (dat_datctl.options & PCRE2_NO_JIT) == 0)
+            capcount = pcre2_jit_match(compiled_code, pp, arg_ulen,
+              dat_datctl.offset, dat_datctl.options | g_notempty, match_data,
+              use_dat_context);
           else
-            capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset,
-              dat_datctl.options | g_notempty, match_data, use_dat_context);
+            capcount = pcre2_match(compiled_code, pp, arg_ulen,
+              dat_datctl.offset, dat_datctl.options | g_notempty, match_data,
+              use_dat_context);
           }
 
         mallocs_until_failure = INT_MAX;
@@ -5143,23 +5215,39 @@ for (gmatched = 0;; gmatched++)
       return PR_ABEND;
       }
 
+    /* tracking JIT with jitverify needs a context, but in cases where one
+    wasn't available, can fallback to the match_data status */
+
+    if ((dat_datctl.control & CTL_NULLCONTEXT) != 0 &&
+        (pat_patctl.control & CTL_JITVERIFY) != 0)
+      jit_was_used = match_data->matchedby == PCRE2_MATCHEDBY_JIT;
+
     /* If PCRE2_COPY_MATCHED_SUBJECT was set, check that things are as they
     should be, but not for fast JIT, where it isn't supported. */
 
-    if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0 &&
-        (pat_patctl.control & CTL_JITFAST) == 0)
+    if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0)
       {
-      if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0)
-        cfprintf(clr_test_error, outfile,
-          "** PCRE2 error: flag not set after copy_matched_subject\n");
+      if ((pat_patctl.control & CTL_JITFAST) != 0 &&
+          (dat_datctl.options & PCRE2_NO_JIT) == 0)
+        {
+        if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0)
+          cfprintf(clr_test_error, outfile,
+            "** PCRE2 error: flag set after unsupported copy_matched_subject\n");
+        }
+      else
+        {
+        if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0)
+          cfprintf(clr_test_error, outfile,
+            "** PCRE2 error: flag not set after copy_matched_subject\n");
 
-      if (match_data->subject == pp)
-        cfprintf(clr_test_error, outfile,
-          "** PCRE2 error: copy_matched_subject has not copied\n");
+        if (match_data->subject == pp)
+          cfprintf(clr_test_error, outfile,
+            "** PCRE2 error: copy_matched_subject has not copied\n");
 
-      if (memcmp(match_data->subject, pp, ulen) != 0)
-        cfprintf(clr_test_error, outfile,
-          "** PCRE2 error: copy_matched_subject mismatch\n");
+        if (memcmp(match_data->subject, pp, ulen) != 0)
+          cfprintf(clr_test_error, outfile,
+            "** PCRE2 error: copy_matched_subject mismatch\n");
+        }
       }
 
     /* If this is not the first time round a global loop, check that the
@@ -5636,6 +5724,9 @@ pcre2_match_context *test_dat_context = NULL, *test_dat_context_copy = NULL;
 pcre2_convert_context *test_con_context = NULL, *test_con_context_copy = NULL;
 pcre2_match_data *test_match_data = NULL;
 pcre2_code *test_compiled_code = NULL;
+#ifdef SUPPORT_JIT
+BOOL test_compiled_with_jit = FALSE;
+#endif
 PCRE2_UCHAR pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 };
 PCRE2_UCHAR callout_int_pattern[] = {
   CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_RIGHT_PARENTHESIS, 0 };
@@ -5940,11 +6031,56 @@ ASSERT(rc == 0 && sizeval == 0, "pcre2_pattern_info(JIT)");
 
 if (pcre2_jit_compile(test_compiled_code, PCRE2_JIT_COMPLETE) == 0)
   {
+  test_compiled_with_jit = TRUE;
+
   rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval);
   ASSERT(rc == 0 && sizeval > 0, "pcre2_pattern_info(JIT after compile)");
   }
 #endif
 
+/* ----------------------- Matching functions ------------------------------ */
+
+#ifdef SUPPORT_JIT
+
+if (test_compiled_with_jit)
+  {
+
+/* Check that fast JIT releases a copied subject when reusing match data. */
+
+  test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code,
+    test_gen_context);
+  ASSERT(test_match_data != NULL, "pcre2_match_data_create_from_pattern(JIT)");
+
+  rc = pcre2_match(test_compiled_code, pattern, 3, 0,
+    PCRE2_COPY_MATCHED_SUBJECT, test_match_data, NULL);
+  ASSERT(rc == 1, "pcre2_match(COPY_MATCHED_SUBJECT)");
+
+  rc = pcre2_jit_match(test_compiled_code, subject_abcz, 4, 0, 0,
+    test_match_data, NULL);
+  ASSERT(rc == 1, "pcre2_jit_match(reused match data)");
+
+  pcre2_match_data_free(test_match_data);
+  test_match_data = NULL;
+
+/* Check that fast JIT ignores PCRE2_NO_JIT */
+
+  test_match_data = pcre2_match_data_create(100000, test_gen_context);
+  ASSERT(test_match_data != NULL, "pcre2_match_data_create(100000)");
+  ASSERT(pcre2_get_ovector_count(test_match_data) == 65535,
+    "pcre2_get_ovector_count(UINT32_MAX) <= UINT16_MAX)");
+
+  rc = pcre2_jit_match(test_compiled_code, subject_abcz, 4, 0, PCRE2_NO_JIT,
+    test_match_data, NULL);
+  ASSERT(rc == 1 && (test_match_data->matchedby == PCRE2_MATCHEDBY_JIT),
+    "pcre2_jit_match(ignore PCRE2_NO_JIT");
+
+  pcre2_match_data_free(test_match_data);
+  test_match_data = NULL;
+
+  }
+
+#endif
+
 /* ----------------------- POSIX functions --------------------------------- */
 
 #if PCRE2_CODE_UNIT_WIDTH == 8
@@ -6244,6 +6380,118 @@ rc = pcre2_substitute(subs_other_code, substitute_subject,
   NULL, 0, replace_buf, &sizeval);
 ASSERT(rc == PCRE2_ERROR_DIFFSUBSPATTERN, "pcre2_substitute(pattern)");
 
+/* -------------- pcre2_serialize_decode: three goto cleanup branches -------- */
+
+{
+  pcre2_code *serialize_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,
+    0, &errorcode, &erroroffset, NULL);
+  uint8_t *serialized_bytes = NULL;
+  PCRE2_SIZE serialized_size = 0;
+  pcre2_code *decode_codes[1] = { NULL };
+
+  ASSERT(serialize_code != NULL, "serialize setup");
+  rc = pcre2_serialize_encode((const pcre2_code **)&serialize_code, 1,
+    &serialized_bytes, &serialized_size, NULL);
+  pcre2_code_free(serialize_code);
+  ASSERT(rc == 1 && serialized_bytes != NULL, "serialize setup");
+
+  /* goto 1: blocksize <= sizeof(pcre2_real_code) */
+  {
+    size_t blocksize_offset = sizeof(pcre2_serialized_data) + TABLES_LENGTH +
+      offsetof(pcre2_real_code, blocksize);
+    uint8_t saved_blocksize[sizeof(PCRE2_SIZE)];
+    memcpy(saved_blocksize, serialized_bytes + blocksize_offset,
+      sizeof(saved_blocksize));
+    memset(serialized_bytes + blocksize_offset, 0, sizeof(PCRE2_SIZE));
+
+    rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, NULL);
+    ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA &&
+      decode_codes[0] == NULL, "pcre2_serialize_decode(bad blocksize)");
+
+    memcpy(serialized_bytes + blocksize_offset, saved_blocksize,
+      sizeof(saved_blocksize));
+  }
+
+  /* goto 2: dst_re malloc failure */
+  mallocs_until_failure = 2;
+  {
+    pcre2_general_context *serialize_test_context =
+      pcre2_general_context_create(&my_malloc, &my_free, NULL);
+    ASSERT(serialize_test_context != NULL, "general_context for serialize test");
+    rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes,
+      serialize_test_context);
+    ASSERT(rc == PCRE2_ERROR_NOMEMORY && decode_codes[0] == NULL,
+      "pcre2_serialize_decode(malloc failure)");
+    mallocs_until_failure = INT_MAX;
+    pcre2_general_context_free(serialize_test_context);
+  }
+
+  /* goto 3: magic_number / name_entry_size / name_count validation */
+  {
+    size_t off = sizeof(pcre2_serialized_data) + TABLES_LENGTH +
+      offsetof(pcre2_real_code, magic_number);
+    uint8_t saved[4];
+    memcpy(saved, serialized_bytes + off, 4);
+    memset(serialized_bytes + off, 0, 4);
+
+    decode_codes[0] = NULL;
+    rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, NULL);
+    memcpy(serialized_bytes + off, saved, 4);
+    ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA &&
+      decode_codes[0] == NULL, "pcre2_serialize_decode(goto 3)");
+  }
+
+  /* Regression: avoid stale dst_re double free on later iteration failure. */
+  {
+    pcre2_code *multi_codes[2];
+    pcre2_code *multi_decode_codes[2] = { NULL, NULL };
+    uint8_t *multi_serialized_bytes = NULL;
+    PCRE2_SIZE multi_serialized_size = 0;
+    CODE_BLOCKSIZE_TYPE first_blocksize;
+    size_t first_blocksize_offset = sizeof(pcre2_serialized_data) +
+      TABLES_LENGTH + offsetof(pcre2_real_code, blocksize);
+    size_t second_blocksize_offset;
+    uint8_t saved_second_blocksize[sizeof(CODE_BLOCKSIZE_TYPE)];
+
+    multi_codes[0] = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,
+      &errorcode, &erroroffset, NULL);
+    multi_codes[1] = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,
+      &errorcode, &erroroffset, NULL);
+    ASSERT(multi_codes[0] != NULL && multi_codes[1] != NULL,
+      "serialize setup (multi-code compile)");
+
+    rc = pcre2_serialize_encode((const pcre2_code **)multi_codes, 2,
+      &multi_serialized_bytes, &multi_serialized_size, NULL);
+    pcre2_code_free(multi_codes[0]);
+    pcre2_code_free(multi_codes[1]);
+    ASSERT(rc == 2 && multi_serialized_bytes != NULL,
+      "serialize setup (multi-code encode)");
+
+    memcpy(&first_blocksize, multi_serialized_bytes + first_blocksize_offset,
+      sizeof(first_blocksize));
+    second_blocksize_offset = sizeof(pcre2_serialized_data) + TABLES_LENGTH +
+      first_blocksize + offsetof(pcre2_real_code, blocksize);
+
+    memcpy(saved_second_blocksize,
+      multi_serialized_bytes + second_blocksize_offset,
+      sizeof(saved_second_blocksize));
+    memset(multi_serialized_bytes + second_blocksize_offset, 0,
+      sizeof(saved_second_blocksize));
+
+    rc = pcre2_serialize_decode(multi_decode_codes, 2, multi_serialized_bytes,
+      NULL);
+    memcpy(multi_serialized_bytes + second_blocksize_offset,
+      saved_second_blocksize, sizeof(saved_second_blocksize));
+    ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA &&
+      multi_decode_codes[0] == NULL && multi_decode_codes[1] == NULL,
+      "pcre2_serialize_decode(regression stale dst_re)");
+
+    pcre2_serialize_free(multi_serialized_bytes);
+  }
+
+  pcre2_serialize_free(serialized_bytes);
+}
+
 /* ------------------------------------------------------------------------- */
 
 #undef ASSERT
index 13b0c7dbeeff8c7addf497577eae2f7cd5a98249..3c8b2f48c4066b065a21c1fbb427390ff6660b9b 100644 (file)
@@ -1205,6 +1205,15 @@ RC=2
 ---------------------------- Test 147 -----------------------------
 pcre2grep: Failed to open -nonfile: No such file or directory
 RC=2
+C123D
+RC=0
+testtemp1grep:A123B
+-testtemp1grep:C123D
+RC=0
+A123B
+RC=0
+E123F
+RC=0
 ---------------------------- Test 148 -----------------------------
 pcre2grep: Unknown option --nonexist
 Usage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]
@@ -1330,3 +1339,12 @@ RC=0
 631-ghj
 632-jkl
 RC=0
+---------------------------- Test 161 -----------------------------
+foo
+RC=0
+foo
+RC=0
+1:1,3
+RC=0
+1,3
+RC=0
index 68bc765a4b140c5117cd8f149d8d8c647d524a6d..bc34d8ec8a3ac8c5ac367dd2b96f7581efb69aff 100644 (file)
@@ -45,3 +45,130 @@ RC=0
 ---------------------------- Test U10 ------------------------------
 \e[1;31mA1\e[0m
 RC=0
+---------------------------- Test U11 ------------------------------
+x
+only-matching RC=0
+\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80x
+multiline RC=0
+\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\80\e[1;31mx\e[0m
+colour RC=0
+---------------------------- Test U12 ------------------------------
+1:abc
+colour-empty-at-end RC=0
+1:\e[1;31ma\e[0m\e[1;31mb\e[0m\e[1;31mc\e[0m
+colour-nonempty-then-empty RC=0
+1:abc
+colour-empty-at-start RC=0
+1:
+2:\e[1;31ma\e[0m\e[1;31mb\e[0m\e[1;31mc\e[0m
+colour-empty-line RC=0
+1:\e[1;31ma\e[0m\e[1;31mb\e[0m\e[1;31mc\e[0m
+colour-no-final-newline RC=0
+1:a
+2:b
+multiline-empty-at-line-end RC=0
+1:a
+2:b
+multiline-empty-at-line-start RC=0
+1:a
+2:b
+multiline-nonempty-then-empty RC=0
+1:a
+b
+c
+multiline-spanning RC=0
+1:a
+b
+c
+4:d
+multiline-spanning-then-empty RC=0
+1:\e[1;31ma
+b
+c\e[0m
+4:d
+multiline-colour-spanning RC=0
+1:x\80\80y
+colour-utf-scan-to-char RC=0
+1:x\80\80y
+multiline-utf-scan-to-char RC=0
+1:x\80\80
+colour-utf-scan-to-newline RC=0
+1:x\80\80
+multiline-utf-scan-to-newline RC=0
+1:x\80\80
+colour-utf-scan-to-end RC=0
+1:x\80\80
+multiline-utf-scan-to-end RC=0
+1:\80\80
+colour-utf-only-continuations RC=0
+1:\80\80
+multiline-utf-only-continuations RC=0
+1:a
+2:b
+3:
+\80\80
+multiline-utf-trailing RC=0
+1:a
+2:b
+3:
+\80\80
+multiline-utf-trailing-empty RC=0
+1:\e[1;31ma
+b\e[0m
+3:
+\80\80
+multiline-colour-utf-trailing-spanning RC=0
+---------------------------- Test U13 ------------------------------
+1:\e[1;31ma\e[0m\e[1;31mb\e[0m\e[1;31mc\e[0m
+colour-bsk RC=0
+1:a
+2:b
+multiline-bsk RC=0
+1:\e[1;31mx\e[0m\80\80\e[1;31my\e[0m
+colour-bsk-utf-scan-to-char RC=0
+1:x\80\80
+multiline-bsk-utf-scan-to-end RC=0
+1:\e[1;31ma\e[0m
+2:\e[1;31mx\e[0m\80\80
+multiline-colour-bsk-utf-trailing RC=0
+---------------------------- Test U14 ------------------------------
+1:ab
+1:ab
+control-progress RC=0
+1:
+empty-at-end RC=0
+1:
+empty-at-start RC=0
+1:a
+1:b
+1:c
+1:a
+1:b
+1:c
+bsk-restart RC=0
+1:x
+1:y
+bsk-utf-scan-to-char RC=0
+1:x
+bsk-utf-scan-to-newline RC=0
+1:x
+bsk-utf-scan-to-end RC=0
+1:ab
+
+multiline-line-boundary RC=0
+1:ab
+cd
+ef
+multiline-spanning RC=0
+1:
+multiline-empty RC=0
+crlf-not-multiline RC=1
+1:\r
+1:\r
+crlf-mid-terminator RC=0
+1:\r
+2:\r
+any-mid-terminator RC=0
+1:2,1
+1:6,1
+crlf-mid-terminator-line-offsets RC=0
index c4ee276464a47199841adb027e89fe565a1aa6e0..d9e6ba8cbf3fda22238ed85e0f691e73408cc976 100644 (file)
     AAA\x80BXYZ 
     AAA\x80BBXYZ 
 
+/(?<=(.))/utf,match_invalid_utf
+    x\x80
+    \x{10000}\x80
+
+/\b./utf,match_invalid_utf
+    \x{10000}s
+    \xf0s
+
 # -------------------------------------
 
 /(*UTF)(?=\x{123})/I
index c618f025b8eb806fd154e6c4ae82c171c452eabf..01cc76a491b851dbe66959390da9cc6c2c458fc9 100644 (file)
 /(..)(*scs:(1)ab$)/match_invalid_utf
     ab\x{df00}cde         
 
+/(?<=(.))/utf,match_invalid_utf
+    x\x{d800}
+    \x{10000}\x{dc00}
+
+/\b./utf,match_invalid_utf
+    \x{10000}s
+    \x{d800}s
+    \x{dc00}s
+
 # ---------------------------------------------------- 
 
 /(*UTF)(?=\x{123})/I
index 08fd72e01ca028d99576b0f5542e02f9c4887bac..a02e6be279069cf22da1d30d30b1cad0a2a2f6ae 100644 (file)
 /abc/
     abc
     abc\=no_jit 
-    
+
+/(*NO_JIT)abc/
+    abc
+
 /abc/jitfast
     abc
     abc\=no_jit 
-    
+
+/(*NO_JIT)abc/jitfast
+\= Expect error
+    abc
+
+# Do not leak a previously copied subject with jitfast (#920)
+
+/abc/jitfast
+    abc\=copy_matched_subject,no_jit
+    abc
+
+/abc/jitfast
+    abc\=copy_matched_subject
+    abc\=null_context
+    abc\=null_context,no_jit
+
 # ---- 
 
 /[aC]/mg,firstline,newline=lf
     zabcz\=callout_error=1
     zabcz\=callout_error=1,substitute_matched
 
+# Check UTF validation when falling back from a partially-compiled JIT pattern
+# to the interpreter
+
+#if unicode
+
+/\b/B,utf,ucp,jit=1
+    \xff\x00\x00\=offset=2,ps
+
+#endif
+
 # End of testinput17
index 65e88bc5cbb3031bfb5da81acc2bb621bb4fb44e..413214ca6cb97a6fd0a11badca65eb25c42122fa 100644 (file)
 
 /^A\x{/
 
+/\x{2/
+
+/\o{7/
+
 /[ab]++/B,no_auto_possess
 
 /[^ab]*+/B,no_auto_possess
@@ -7396,6 +7400,16 @@ a)"xI
 
 /[z&/alt_extended_class
 
+/(?<=[12[34]])/alt_extended_class
+    1
+    2
+    3
+    4
+    1]
+\= Expect no match
+    5
+    []
+
 /[[^]~~[^]]/B,alt_extended_class,allow_empty_class
 \= Expect no match
     a
@@ -7403,6 +7417,18 @@ a)"xI
 /[^[[^]~~[^]]]/B,alt_extended_class,allow_empty_class
     a
 
+/[\d--1].(?<!x)/alt_extended_class
+    0a
+    90
+\= Expect no match
+    1
+    2
+    a
+    1a
+    0x
+    aa
+    xa
+
 # --------------
 
 # EXTENDED CHARACTER CLASSES (Perl)
@@ -7515,6 +7541,13 @@ a)"xI
 
 /(?[\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+(\n+[a]&\n+((\n)&\n))))))))))))))])/
 
+/(?[\d-[1]]).(?<!x)/
+    0a
+    90
+\= Expect no match
+    1a
+    0x
+
 # --------------
 
 /[[:digit:]   -Z]/xx
@@ -7640,6 +7673,47 @@ a)"xI
 
 # --------------
 
+# Test backreferences with possessive repeats
+
+/(..)\1*+/B
+  ab
+  abc
+  abababc
+
+/(..)\1++/B
+  abc
+  ababc
+  aababab
+  aabababc
+
+/(..)\1?+/B
+  aa
+  aac
+  ababab
+
+# The + is intentionally missing,
+# exact repeat is always possessive
+/(..)\1{3}/B
+  abababac
+  abababab
+  ababababc
+
+/(..)\1{2,}+/B
+  ababac
+  ababab
+  abababab
+  ababababab
+  abababababc
+
+/(..)\1{3,5}+/B
+  abababac
+  abababab
+  ababababab
+  abababababab
+  ababababababab
+
+# --------------
+
 # Attempt at full coverage of the substitution buffer-management code - not
 # just covering each line in each macro, but covering each instantiation of each
 # line in those macros.
@@ -8273,5 +8347,41 @@ a)"xI
     foo|bar\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject
     foo|bar\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject,zero_terminate
 
+# --------------
+# Some more tests for a substitution regression
+# --------------
+
+/foo(?<Bar>BAR)?/substitute_extended,replace=X${Bar:+\:\:text}Y
+    foo
+    fooBAR
+
+# --------------
+# Tests for substitution with partial
+# --------------
+
+/(a)b+/
+\= Expect to fail with "bad option"
+    ab\=ph,replace=FOO
+\= Expect to fail with "partial match"
+    ab\=ph,substitute_replacement_only,replace=FOO
+\= Expect success
+    abc\=ph,substitute_replacement_only,replace=FOO
+    zabc\=ph,substitute_replacement_only,replace=>$&|$1|$`<
+\= Expect to fail with PCRE2_ERROR_PARTIALSUBS
+    abc\=ph,substitute_replacement_only,replace=>$_<
+    abc\=ph,substitute_replacement_only,replace=>$'<
+
+/(a)b+/
+\= Expect to fail with "bad option"
+    ab\=ps,replace=FOO
+\= Expect to fail with "partial match"
+    a\=ps,substitute_replacement_only,replace=FOO
+\= Expect success
+    ab\=ps,substitute_replacement_only,replace=FOO
+    abc\=ps,substitute_replacement_only,replace=FOO
+    zabc\=ps,substitute_replacement_only,replace=>$&|$1|$`<
+\= Expect to fail with PCRE2_ERROR_PARTIALSUBS
+    abc\=ps,substitute_replacement_only,replace=>$_<
+    abc\=ps,substitute_replacement_only,replace=>$'<
 
 # End of testinput2
index 0d262ee8ea97e3d7ee39293c1448bb66b994c90a..61d827bf50f50410a98cfce5565bca26452ff9e7 100644 (file)
 
 # Character not in script
 /^\p{Han}/utf
-    \x{323b0}
+    \x{3347a}
 
 # Base script check
 /^\p{sc=Yi}/utf
 
 # Character not in script
 /^\p{Tangut}/utf
-    \x{18d09}
+    \x{18d20}
 
 # Base script check
 /^\p{sc=Nushu}/utf
index 495906c915811eb9a9aa478074446572d6228d0a..8f444b04a8c13ebb1b02c5d825120340c4843c0a 100644 (file)
@@ -2,7 +2,7 @@
 # data, do not edit unless that data has changed and they are reflecting
 # a previous version.
 
-# Unicode Script Extension tests for version 16.0.0
+# Unicode Script Extension tests for version 17.0.0
 
 #perltest
 
     \x{2e80}
 
 /^\p{Script=Hani}/utf
-    \x{323af}
+    \x{33479}
 
 # Script extension check
 /^\p{Han}/utf
 
 # Character not in script
 /^\p{Han}/utf
-    \x{323b0}
+    \x{3347a}
 
 # Base script check
 /^\p{sc=Yi}/utf
     \x{302}
 
 /^\p{Script_Extensions=Tfng}/utf
-    \x{309}
+    \x{323}
 
 # Script extension only character
 /^\p{Tifinagh}/utf
     \x{11180}
 
 /^\p{Script=Shrd}/utf
-    \x{111df}
+    \x{11b67}
 
 # Script extension check
 /^\p{Sharada}/utf
 
 # Character not in script
 /^\p{Sharada}/utf
-    \x{111e0}
+    \x{11b68}
 
 # Base script check
 /^\p{sc=Takri}/utf
 /^\p{Adlam}/utf
     \x{1e960}
 
+# Base script check
+/^\p{sc=Newa}/utf
+    \x{11400}
+
+/^\p{Script=Newa}/utf
+    \x{11461}
+
+# Script extension check
+/^\p{Newa}/utf
+    \x{951}
+
+/^\p{scx=Newa}/utf
+    \x{1ced}
+
+# Script extension only character
+/^\p{Newa}/utf
+    \x{951}
+
+/^\p{sc=Newa}/utf
+    \x{951}
+
+# Character not in script
+/^\p{Newa}/utf
+    \x{11462}
+
 # Base script check
 /^\p{sc=Osage}/utf
     \x{104b0}
 /^\p{Osage}/utf
     \x{301}
 
-/^\p{scx=Osge}/utf
+/^\p{Script_Extensions=Osge}/utf
     \x{358}
 
 # Script extension only character
     \x{16fe0}
 
 /^\p{Script=Tang}/utf
-    \x{18d08}
+    \x{18df2}
 
 # Script extension check
 /^\p{Tangut}/utf
     \x{2ff0}
 
-/^\p{Script_Extensions=Tang}/utf
+/^\p{scx=Tang}/utf
     \x{31ef}
 
 # Script extension only character
 
 # Character not in script
 /^\p{Tangut}/utf
-    \x{18d09}
+    \x{18df3}
 
 # Base script check
 /^\p{sc=Masaram_Gondi}/utf
 /^\p{Masaram_Gondi}/utf
     \x{964}
 
-/^\p{scx=Gonm}/utf
+/^\p{Script_Extensions=Gonm}/utf
     \x{965}
 
 # Script extension only character
 /^\p{Dogra}/utf
     \x{964}
 
-/^\p{Script_Extensions=Dogr}/utf
+/^\p{scx=Dogr}/utf
     \x{a839}
 
 # Script extension only character
 /^\p{Gunjala_Gondi}/utf
     \x{b7}
 
-/^\p{scx=Gong}/utf
+/^\p{Script_Extensions=Gong}/utf
     \x{965}
 
 # Script extension only character
 /^\p{Hanifi_Rohingya}/utf
     \x{60c}
 
-/^\p{Script_Extensions=Rohg}/utf
+/^\p{scx=Rohg}/utf
     \x{6d4}
 
 # Script extension only character
 /^\p{Sogdian}/utf
     \x{640}
 
-/^\p{scx=Sogd}/utf
+/^\p{Script_Extensions=Sogd}/utf
     \x{640}
 
 # Script extension only character
 
 # Script extension check
 /^\p{Nandinagari}/utf
-    \x{964}
+    \x{951}
 
-/^\p{Script_Extensions=Nand}/utf
+/^\p{scx=Nand}/utf
     \x{a835}
 
 # Script extension only character
 /^\p{Nandinagari}/utf
-    \x{964}
+    \x{951}
 
 /^\p{sc=Nandinagari}/utf
-    \x{964}
+    \x{951}
 
 # Character not in script
 /^\p{Nandinagari}/utf
 /^\p{Yezidi}/utf
     \x{60c}
 
-/^\p{scx=Yezi}/utf
+/^\p{Script_Extensions=Yezi}/utf
     \x{669}
 
 # Script extension only character
 /^\p{Cypro_Minoan}/utf
     \x{10100}
 
-/^\p{Script_Extensions=Cpmn}/utf
+/^\p{scx=Cpmn}/utf
     \x{10101}
 
 # Script extension only character
 /^\p{Old_Uyghur}/utf
     \x{640}
 
-/^\p{scx=Ougr}/utf
+/^\p{Script_Extensions=Ougr}/utf
     \x{10af2}
 
 # Script extension only character
 /^\p{Toto}/utf
     \x{2bc}
 
-/^\p{Script_Extensions=Toto}/utf
+/^\p{scx=Toto}/utf
     \x{2bc}
 
 # Script extension only character
 /^\p{Garay}/utf
     \x{60c}
 
-/^\p{scx=Gara}/utf
+/^\p{Script_Extensions=Gara}/utf
     \x{61f}
 
 # Script extension only character
 /^\p{Gurung_Khema}/utf
     \x{965}
 
-/^\p{Script_Extensions=Gukh}/utf
+/^\p{scx=Gukh}/utf
     \x{965}
 
 # Script extension only character
 /^\p{Ol_Onal}/utf
     \x{964}
 
-/^\p{scx=Onao}/utf
+/^\p{Script_Extensions=Onao}/utf
     \x{965}
 
 # Script extension only character
 /^\p{Sunuwar}/utf
     \x{300}
 
-/^\p{Script_Extensions=Sunu}/utf
+/^\p{scx=Sunu}/utf
     \x{331}
 
 # Script extension only character
 /^\p{Todhri}/utf
     \x{301}
 
-/^\p{scx=Todr}/utf
+/^\p{Script_Extensions=Todr}/utf
     \x{35e}
 
 # Script extension only character
 /^\p{Tulu_Tigalari}/utf
     \x{ce6}
 
-/^\p{Script_Extensions=Tutg}/utf
+/^\p{scx=Tutg}/utf
     \x{a8f1}
 
 # Script extension only character
 /^\p{Marchen}/utf
     \x{11cb7}
 
-# Base script check
-/^\p{sc=Newa}/utf
-    \x{11400}
-
-/^\p{Script=Newa}/utf
-    \x{11461}
-
-# Character not in script
-/^\p{Newa}/utf
-    \x{11462}
-
 # Base script check
 /^\p{sc=Nushu}/utf
     \x{16fe1}
 /^\p{Kirat_Rai}/utf
     \x{16d7a}
 
+# Base script check
+/^\p{sc=Sidetic}/utf
+    \x{10940}
+
+/^\p{Script=Sidt}/utf
+    \x{10959}
+
+# Character not in script
+/^\p{Sidetic}/utf
+    \x{1095a}
+
+# Base script check
+/^\p{sc=Tai_Yo}/utf
+    \x{1e6c0}
+
+/^\p{Script=Tayo}/utf
+    \x{1e6ff}
+
+# Character not in script
+/^\p{Tai_Yo}/utf
+    \x{1e700}
+
+# Base script check
+/^\p{sc=Tolong_Siki}/utf
+    \x{11db0}
+
+/^\p{Script=Tols}/utf
+    \x{11de9}
+
+# Character not in script
+/^\p{Tolong_Siki}/utf
+    \x{11dea}
+
+# Base script check
+/^\p{sc=Beria_Erfe}/utf
+    \x{16ea0}
+
+/^\p{Script=Berf}/utf
+    \x{16ed3}
+
+# Character not in script
+/^\p{Beria_Erfe}/utf
+    \x{16ed4}
+
 # End of test
index 7f9f6a2d06e43dd1e5d9c61c5879dd321171da16..098f4100942c6b4e9a27c19e36bcbb7628a87a39 100644 (file)
 /([\x{6535}\x{6536}\x{6538}\x{6539}\x{653b}\x{653c}\x{653e}\x{653f}\x{6541}\x{6542}\x{8000}-\x{ffff}]#)+/B,utf
   \x{6534}#\x{6537}#\x{653a}#\x{653d}#\x{6540}#\x{6543}#\x{7fff}#\x{6535}#\x{6536}#\x{6538}#\x{6539}#\x{653b}#\x{653c}#\x{653e}#\x{653f}#\x{6541}#\x{6542}#\x{8000}#\x{c246}#\x{ffff}
 
+/[\x{ff}\x{100}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf
+  \x{ff}\x{100}\x{8000}\x{800a}\x{800e}\x{101}
+
+/[\x{ff}-\x{104}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf
+  \x{ff}\x{100}\x{101}\x{104}\x{8000}\x{800a}\x{800e}\x{105}
+
 /[[:xdigit:]\x{400}-\x{600}]+/utf,ucp
   !a0\x{400}\x{600}9\x{3ff}
 
     \x{e1}
     \x{c1}
 
+# An unterminated \N{U+ escape at the end of the pattern must
+# report an error offset that lies within the pattern.
+
+/(*UTF)\N{U+2/
+
 # End of testinput5
index b8add04b03e227c6d94aa690c9224eb972013804..393ac2076ce3bb82993f42ff822759224c7c84f4 100644 (file)
@@ -1779,6 +1779,20 @@ No match
     AAA\x80BBXYZ 
 No match
 
+/(?<=(.))/utf,match_invalid_utf
+    x\x80
+ 0: 
+ 1: x
+    \x{10000}\x80
+ 0: 
+ 1: \x{10000}
+
+/\b./utf,match_invalid_utf
+    \x{10000}s
+ 0: s
+    \xf0s
+ 0: s
+
 # -------------------------------------
 
 /(*UTF)(?=\x{123})/I
index 4883f5edf1e13ee5280aa711547467df6b87944f..d235c11f2a1f4447a2a792dcbd2a93e69daad79c 100644 (file)
@@ -1659,6 +1659,22 @@ No match
  0: ab
  1: ab
 
+/(?<=(.))/utf,match_invalid_utf
+    x\x{d800}
+ 0: 
+ 1: x
+    \x{10000}\x{dc00}
+ 0: 
+ 1: \x{10000}
+
+/\b./utf,match_invalid_utf
+    \x{10000}s
+ 0: s
+    \x{d800}s
+ 0: s
+    \x{dc00}s
+ 0: s
+
 # ---------------------------------------------------- 
 
 /(*UTF)(?=\x{123})/I
index 5a4255f8f0ec646eb81800644db6bc4bb885dad1..725cb274ea7eefa38458f742377ca77a3bf2c1fe 100644 (file)
@@ -1658,6 +1658,22 @@ No match
  0: ab
  1: ab
 
+/(?<=(.))/utf,match_invalid_utf
+    x\x{d800}
+ 0: 
+ 1: x
+    \x{10000}\x{dc00}
+ 0: 
+ 1: \x{10000}
+
+/\b./utf,match_invalid_utf
+    \x{10000}s
+ 0: s
+    \x{d800}s
+ 0: s
+    \x{dc00}s
+ 0: s
+
 # ---------------------------------------------------- 
 
 /(*UTF)(?=\x{123})/I
index 6d550084329d035450d75551a3385b9ffe0db284..c678587faf8ba0f54fb3e767937f3c79cf86aab7 100644 (file)
@@ -539,13 +539,38 @@ Failed: error -47: match limit exceeded
  0: abc (JIT)
     abc\=no_jit 
  0: abc
-    
+
+/(*NO_JIT)abc/
+    abc
+ 0: abc
+
 /abc/jitfast
     abc
  0: abc (JIT)
     abc\=no_jit 
+ 0: abc
+
+/(*NO_JIT)abc/jitfast
+\= Expect error
+    abc
+Failed: error -45: bad JIT option
+
+# Do not leak a previously copied subject with jitfast (#920)
+
+/abc/jitfast
+    abc\=copy_matched_subject,no_jit
+ 0: abc
+    abc
  0: abc (JIT)
-    
+
+/abc/jitfast
+    abc\=copy_matched_subject
+ 0: abc (JIT)
+    abc\=null_context
+ 0: abc (JIT)
+    abc\=null_context,no_jit
+ 0: abc
+
 # ---- 
 
 /[aC]/mg,firstline,newline=lf
@@ -601,4 +626,21 @@ Failed: error -37: callout error code
   1  ^        a
 Failed: error -37: callout error code
 
+# Check UTF validation when falling back from a partially-compiled JIT pattern
+# to the interpreter
+
+#if unicode
+
+/\b/B,utf,ucp,jit=1
+------------------------------------------------------------------
+        Bra
+        \b (ucp)
+        Ket
+        End
+------------------------------------------------------------------
+    \xff\x00\x00\=offset=2,ps
+Partial match: 
+
+#endif
+
 # End of testinput17
index 23738a33b9abe7cc9e716904d26f1f2416828d06..897c026d948cd006773901689a72b1bcf34b2cbb 100644 (file)
@@ -13630,6 +13630,14 @@ Failed: error 167 at offset 8: non-hex character in \x{} (closing brace missing?
 Failed: error 178 at offset 5: digits missing after \x or in \x{} or \o{} or \N{U+}
         here: ^A\x{ |<--|
 
+/\x{2/
+Failed: error 167 at offset 4: non-hex character in \x{} (closing brace missing?)
+        here: \x{2 |<--|
+
+/\o{7/
+Failed: error 164 at offset 4: non-octal character in \o{} (closing brace missing?)
+        here: \o{7 |<--|
+
 /[ab]++/B,no_auto_possess
 ------------------------------------------------------------------
         Bra
@@ -21765,6 +21773,23 @@ Failed: error 207 at offset 117: extended character class nesting is too deep
 Failed: error 106 at offset 3: missing terminating ] for character class
         here: [z& |<--|
 
+/(?<=[12[34]])/alt_extended_class
+    1
+ 0: 
+    2
+ 0: 
+    3
+ 0: 
+    4
+ 0: 
+    1]
+ 0: 
+\= Expect no match
+    5
+No match
+    []
+No match
+
 /[[^]~~[^]]/B,alt_extended_class,allow_empty_class
 ------------------------------------------------------------------
         Bra
@@ -21786,6 +21811,27 @@ No match
     a
  0: a
 
+/[\d--1].(?<!x)/alt_extended_class
+    0a
+ 0: 0a
+    90
+ 0: 90
+\= Expect no match
+    1
+No match
+    2
+No match
+    a
+No match
+    1a
+No match
+    0x
+No match
+    aa
+No match
+    xa
+No match
+
 # --------------
 
 # EXTENDED CHARACTER CLASSES (Perl)
@@ -21998,6 +22044,17 @@ Failed: error 207 at offset 160: extended character class nesting is too deep
 Failed: error 207 at offset 157: extended character class nesting is too deep
         here: ...n+[a]&\n+( |-->| (\n)&\n)))...
 
+/(?[\d-[1]]).(?<!x)/
+    0a
+ 0: 0a
+    90
+ 0: 90
+\= Expect no match
+    1a
+No match
+    0x
+No match
+
 # --------------
 
 /[[:digit:]   -Z]/xx
@@ -22264,6 +22321,149 @@ No match
 
 # --------------
 
+# Test backreferences with possessive repeats
+
+/(..)\1*+/B
+------------------------------------------------------------------
+        Bra
+        CBra 1
+        Any
+        Any
+        Ket
+        \g{1}*+
+        Ket
+        End
+------------------------------------------------------------------
+  ab
+ 0: ab
+ 1: ab
+  abc
+ 0: ab
+ 1: ab
+  abababc
+ 0: ababab
+ 1: ab
+
+/(..)\1++/B
+------------------------------------------------------------------
+        Bra
+        CBra 1
+        Any
+        Any
+        Ket
+        \g{1}++
+        Ket
+        End
+------------------------------------------------------------------
+  abc
+No match
+  ababc
+ 0: abab
+ 1: ab
+  aababab
+ 0: ababab
+ 1: ab
+  aabababc
+ 0: ababab
+ 1: ab
+
+/(..)\1?+/B
+------------------------------------------------------------------
+        Bra
+        CBra 1
+        Any
+        Any
+        Ket
+        \g{1}?+
+        Ket
+        End
+------------------------------------------------------------------
+  aa
+ 0: aa
+ 1: aa
+  aac
+ 0: aa
+ 1: aa
+  ababab
+ 0: abab
+ 1: ab
+
+# The + is intentionally missing,
+# exact repeat is always possessive
+/(..)\1{3}/B
+------------------------------------------------------------------
+        Bra
+        CBra 1
+        Any
+        Any
+        Ket
+        \g{1}{3,3}
+        Ket
+        End
+------------------------------------------------------------------
+  abababac
+No match
+  abababab
+ 0: abababab
+ 1: ab
+  ababababc
+ 0: abababab
+ 1: ab
+
+/(..)\1{2,}+/B
+------------------------------------------------------------------
+        Bra
+        CBra 1
+        Any
+        Any
+        Ket
+        \g{1}{2,}+
+        Ket
+        End
+------------------------------------------------------------------
+  ababac
+No match
+  ababab
+ 0: ababab
+ 1: ab
+  abababab
+ 0: abababab
+ 1: ab
+  ababababab
+ 0: ababababab
+ 1: ab
+  abababababc
+ 0: ababababab
+ 1: ab
+
+/(..)\1{3,5}+/B
+------------------------------------------------------------------
+        Bra
+        CBra 1
+        Any
+        Any
+        Ket
+        \g{1}{3,5}+
+        Ket
+        End
+------------------------------------------------------------------
+  abababac
+No match
+  abababab
+ 0: abababab
+ 1: ab
+  ababababab
+ 0: ababababab
+ 1: ab
+  abababababab
+ 0: abababababab
+ 1: ab
+  ababababababab
+ 0: abababababab
+ 1: ab
+
+# --------------
+
 # Attempt at full coverage of the substitution buffer-management code - not
 # just covering each line in each macro, but covering each instantiation of each
 # line in those macros.
@@ -23513,6 +23713,61 @@ Failed: error -72: substitute subject differs from prior match call
     foo|bar\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject,zero_terminate
 Failed: error -72: substitute subject differs from prior match call
 
+# --------------
+# Some more tests for a substitution regression
+# --------------
+
+/foo(?<Bar>BAR)?/substitute_extended,replace=X${Bar:+\:\:text}Y
+    foo
+ 1: XY
+    fooBAR
+ 1: X::textY
+
+# --------------
+# Tests for substitution with partial
+# --------------
+
+/(a)b+/
+\= Expect to fail with "bad option"
+    ab\=ph,replace=FOO
+Failed: error -34: bad option value
+\= Expect to fail with "partial match"
+    ab\=ph,substitute_replacement_only,replace=FOO
+Failed: error -2: partial match
+\= Expect success
+    abc\=ph,substitute_replacement_only,replace=FOO
+ 1: FOO
+    zabc\=ph,substitute_replacement_only,replace=>$&|$1|$`<
+ 1: >ab|a|z<
+\= Expect to fail with PCRE2_ERROR_PARTIALSUBS
+    abc\=ph,substitute_replacement_only,replace=>$_<
+Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match
+        here: >$_ |<--| <
+    abc\=ph,substitute_replacement_only,replace=>$'<
+Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match
+        here: >$' |<--| <
+
+/(a)b+/
+\= Expect to fail with "bad option"
+    ab\=ps,replace=FOO
+Failed: error -34: bad option value
+\= Expect to fail with "partial match"
+    a\=ps,substitute_replacement_only,replace=FOO
+Failed: error -2: partial match
+\= Expect success
+    ab\=ps,substitute_replacement_only,replace=FOO
+ 1: FOO
+    abc\=ps,substitute_replacement_only,replace=FOO
+ 1: FOO
+    zabc\=ps,substitute_replacement_only,replace=>$&|$1|$`<
+ 1: >ab|a|z<
+\= Expect to fail with PCRE2_ERROR_PARTIALSUBS
+    abc\=ps,substitute_replacement_only,replace=>$_<
+Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match
+        here: >$_ |<--| <
+    abc\=ps,substitute_replacement_only,replace=>$'<
+Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match
+        here: >$' |<--| <
 
 # End of testinput2
 Error -80: PCRE2_ERROR_BADDATA (unknown error number)
index b1f00a10bbf0db2dc6d099c9e4b8aceb08d085cc..575d953e1299f54c6da9a2512e33e0bb7010c4b6 100644 (file)
@@ -771,7 +771,7 @@ No match
 
 # Character not in script
 /^\p{Han}/utf
-    \x{323b0}
+    \x{3347a}
 No match
 
 # Base script check
@@ -3271,7 +3271,7 @@ No match
 
 # Character not in script
 /^\p{Tangut}/utf
-    \x{18d09}
+    \x{18d20}
 No match
 
 # Base script check
index 9cf33bf93cf32d8ca9cc9d96a9dee6404abe2bde..89d5cc196336907cdedff796ae2b81f6ecceaab9 100644 (file)
@@ -2,7 +2,7 @@
 # data, do not edit unless that data has changed and they are reflecting
 # a previous version.
 
-# Unicode Script Extension tests for version 16.0.0
+# Unicode Script Extension tests for version 17.0.0
 
 #perltest
 
@@ -972,8 +972,8 @@ No match
  0: \x{2e80}
 
 /^\p{Script=Hani}/utf
-    \x{323af}
- 0: \x{323af}
+    \x{33479}
+ 0: \x{33479}
 
 # Script extension check
 /^\p{Han}/utf
@@ -995,7 +995,7 @@ No match
 
 # Character not in script
 /^\p{Han}/utf
-    \x{323b0}
+    \x{3347a}
 No match
 
 # Base script check
@@ -1461,8 +1461,8 @@ No match
  0: \x{302}
 
 /^\p{Script_Extensions=Tfng}/utf
-    \x{309}
- 0: \x{309}
+    \x{323}
+ 0: \x{323}
 
 # Script extension only character
 /^\p{Tifinagh}/utf
@@ -1996,8 +1996,8 @@ No match
  0: \x{11180}
 
 /^\p{Script=Shrd}/utf
-    \x{111df}
- 0: \x{111df}
+    \x{11b67}
+ 0: \x{11b67}
 
 # Script extension check
 /^\p{Sharada}/utf
@@ -2019,7 +2019,7 @@ No match
 
 # Character not in script
 /^\p{Sharada}/utf
-    \x{111e0}
+    \x{11b68}
 No match
 
 # Base script check
@@ -2566,6 +2566,38 @@ No match
     \x{1e960}
 No match
 
+# Base script check
+/^\p{sc=Newa}/utf
+    \x{11400}
+ 0: \x{11400}
+
+/^\p{Script=Newa}/utf
+    \x{11461}
+ 0: \x{11461}
+
+# Script extension check
+/^\p{Newa}/utf
+    \x{951}
+ 0: \x{951}
+
+/^\p{scx=Newa}/utf
+    \x{1ced}
+ 0: \x{1ced}
+
+# Script extension only character
+/^\p{Newa}/utf
+    \x{951}
+ 0: \x{951}
+
+/^\p{sc=Newa}/utf
+    \x{951}
+No match
+
+# Character not in script
+/^\p{Newa}/utf
+    \x{11462}
+No match
+
 # Base script check
 /^\p{sc=Osage}/utf
     \x{104b0}
@@ -2580,7 +2612,7 @@ No match
     \x{301}
  0: \x{301}
 
-/^\p{scx=Osge}/utf
+/^\p{Script_Extensions=Osge}/utf
     \x{358}
  0: \x{358}
 
@@ -2604,15 +2636,15 @@ No match
  0: \x{16fe0}
 
 /^\p{Script=Tang}/utf
-    \x{18d08}
- 0: \x{18d08}
+    \x{18df2}
+ 0: \x{18df2}
 
 # Script extension check
 /^\p{Tangut}/utf
     \x{2ff0}
  0: \x{2ff0}
 
-/^\p{Script_Extensions=Tang}/utf
+/^\p{scx=Tang}/utf
     \x{31ef}
  0: \x{31ef}
 
@@ -2627,7 +2659,7 @@ No match
 
 # Character not in script
 /^\p{Tangut}/utf
-    \x{18d09}
+    \x{18df3}
 No match
 
 # Base script check
@@ -2644,7 +2676,7 @@ No match
     \x{964}
  0: \x{964}
 
-/^\p{scx=Gonm}/utf
+/^\p{Script_Extensions=Gonm}/utf
     \x{965}
  0: \x{965}
 
@@ -2676,7 +2708,7 @@ No match
     \x{964}
  0: \x{964}
 
-/^\p{Script_Extensions=Dogr}/utf
+/^\p{scx=Dogr}/utf
     \x{a839}
  0: \x{a839}
 
@@ -2708,7 +2740,7 @@ No match
     \x{b7}
  0: \x{b7}
 
-/^\p{scx=Gong}/utf
+/^\p{Script_Extensions=Gong}/utf
     \x{965}
  0: \x{965}
 
@@ -2740,7 +2772,7 @@ No match
     \x{60c}
  0: \x{60c}
 
-/^\p{Script_Extensions=Rohg}/utf
+/^\p{scx=Rohg}/utf
     \x{6d4}
  0: \x{6d4}
 
@@ -2772,7 +2804,7 @@ No match
     \x{640}
  0: \x{640}
 
-/^\p{scx=Sogd}/utf
+/^\p{Script_Extensions=Sogd}/utf
     \x{640}
  0: \x{640}
 
@@ -2801,20 +2833,20 @@ No match
 
 # Script extension check
 /^\p{Nandinagari}/utf
-    \x{964}
- 0: \x{964}
+    \x{951}
+ 0: \x{951}
 
-/^\p{Script_Extensions=Nand}/utf
+/^\p{scx=Nand}/utf
     \x{a835}
  0: \x{a835}
 
 # Script extension only character
 /^\p{Nandinagari}/utf
-    \x{964}
- 0: \x{964}
+    \x{951}
+ 0: \x{951}
 
 /^\p{sc=Nandinagari}/utf
-    \x{964}
+    \x{951}
 No match
 
 # Character not in script
@@ -2836,7 +2868,7 @@ No match
     \x{60c}
  0: \x{60c}
 
-/^\p{scx=Yezi}/utf
+/^\p{Script_Extensions=Yezi}/utf
     \x{669}
  0: \x{669}
 
@@ -2868,7 +2900,7 @@ No match
     \x{10100}
  0: \x{10100}
 
-/^\p{Script_Extensions=Cpmn}/utf
+/^\p{scx=Cpmn}/utf
     \x{10101}
  0: \x{10101}
 
@@ -2900,7 +2932,7 @@ No match
     \x{640}
  0: \x{640}
 
-/^\p{scx=Ougr}/utf
+/^\p{Script_Extensions=Ougr}/utf
     \x{10af2}
  0: \x{10af2}
 
@@ -2932,7 +2964,7 @@ No match
     \x{2bc}
  0: \x{2bc}
 
-/^\p{Script_Extensions=Toto}/utf
+/^\p{scx=Toto}/utf
     \x{2bc}
  0: \x{2bc}
 
@@ -2964,7 +2996,7 @@ No match
     \x{60c}
  0: \x{60c}
 
-/^\p{scx=Gara}/utf
+/^\p{Script_Extensions=Gara}/utf
     \x{61f}
  0: \x{61f}
 
@@ -2996,7 +3028,7 @@ No match
     \x{965}
  0: \x{965}
 
-/^\p{Script_Extensions=Gukh}/utf
+/^\p{scx=Gukh}/utf
     \x{965}
  0: \x{965}
 
@@ -3028,7 +3060,7 @@ No match
     \x{964}
  0: \x{964}
 
-/^\p{scx=Onao}/utf
+/^\p{Script_Extensions=Onao}/utf
     \x{965}
  0: \x{965}
 
@@ -3060,7 +3092,7 @@ No match
     \x{300}
  0: \x{300}
 
-/^\p{Script_Extensions=Sunu}/utf
+/^\p{scx=Sunu}/utf
     \x{331}
  0: \x{331}
 
@@ -3092,7 +3124,7 @@ No match
     \x{301}
  0: \x{301}
 
-/^\p{scx=Todr}/utf
+/^\p{Script_Extensions=Todr}/utf
     \x{35e}
  0: \x{35e}
 
@@ -3124,7 +3156,7 @@ No match
     \x{ce6}
  0: \x{ce6}
 
-/^\p{Script_Extensions=Tutg}/utf
+/^\p{scx=Tutg}/utf
     \x{a8f1}
  0: \x{a8f1}
 
@@ -3898,20 +3930,6 @@ No match
     \x{11cb7}
 No match
 
-# Base script check
-/^\p{sc=Newa}/utf
-    \x{11400}
- 0: \x{11400}
-
-/^\p{Script=Newa}/utf
-    \x{11461}
- 0: \x{11461}
-
-# Character not in script
-/^\p{Newa}/utf
-    \x{11462}
-No match
-
 # Base script check
 /^\p{sc=Nushu}/utf
     \x{16fe1}
@@ -4150,4 +4168,60 @@ No match
     \x{16d7a}
 No match
 
+# Base script check
+/^\p{sc=Sidetic}/utf
+    \x{10940}
+ 0: \x{10940}
+
+/^\p{Script=Sidt}/utf
+    \x{10959}
+ 0: \x{10959}
+
+# Character not in script
+/^\p{Sidetic}/utf
+    \x{1095a}
+No match
+
+# Base script check
+/^\p{sc=Tai_Yo}/utf
+    \x{1e6c0}
+ 0: \x{1e6c0}
+
+/^\p{Script=Tayo}/utf
+    \x{1e6ff}
+ 0: \x{1e6ff}
+
+# Character not in script
+/^\p{Tai_Yo}/utf
+    \x{1e700}
+No match
+
+# Base script check
+/^\p{sc=Tolong_Siki}/utf
+    \x{11db0}
+ 0: \x{11db0}
+
+/^\p{Script=Tols}/utf
+    \x{11de9}
+ 0: \x{11de9}
+
+# Character not in script
+/^\p{Tolong_Siki}/utf
+    \x{11dea}
+No match
+
+# Base script check
+/^\p{sc=Beria_Erfe}/utf
+    \x{16ea0}
+ 0: \x{16ea0}
+
+/^\p{Script=Berf}/utf
+    \x{16ed3}
+ 0: \x{16ed3}
+
+# Character not in script
+/^\p{Beria_Erfe}/utf
+    \x{16ed4}
+No match
+
 # End of test
index fd36974dd4272bad2198af0cd8b843d666f293ba..0337d6aa67ab8c2ab9fcb6d6e5d0be3637bd1f23 100644 (file)
@@ -6339,6 +6339,26 @@ Failed: error 115 at offset 53: reference to non-existent subpattern
  0: \x{6535}#\x{6536}#\x{6538}#\x{6539}#\x{653b}#\x{653c}#\x{653e}#\x{653f}#\x{6541}#\x{6542}#\x{8000}#\x{c246}#
  1: \x{c246}#
 
+/[\x{ff}\x{100}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf
+------------------------------------------------------------------
+        Bra
+        [\xff\x{100}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]++
+        Ket
+        End
+------------------------------------------------------------------
+  \x{ff}\x{100}\x{8000}\x{800a}\x{800e}\x{101}
+ 0: \x{ff}\x{100}\x{8000}\x{800a}\x{800e}
+
+/[\x{ff}-\x{104}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf
+------------------------------------------------------------------
+        Bra
+        [\xff\x{100}-\x{104}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]++
+        Ket
+        End
+------------------------------------------------------------------
+  \x{ff}\x{100}\x{101}\x{104}\x{8000}\x{800a}\x{800e}\x{105}
+ 0: \x{ff}\x{100}\x{101}\x{104}\x{8000}\x{800a}\x{800e}
+
 /[[:xdigit:]\x{400}-\x{600}]+/utf,ucp
   !a0\x{400}\x{600}9\x{3ff}
  0: a0\x{400}\x{600}9
@@ -8315,4 +8335,11 @@ Failed: error 150 at offset 5: invalid range in character class
     \x{c1}
  0: \x{c1}
 
+# An unterminated \N{U+ escape at the end of the pattern must
+# report an error offset that lies within the pattern.
+
+/(*UTF)\N{U+2/
+Failed: error 167 at offset 12: non-hex character in \x{} (closing brace missing?)
+        here: ...UTF)\N{U+2 |<--|
+
 # End of testinput5
index b8dba9871ceafe428530d48369ba1d2d546bc2b5..c16e466408c083dd0c0003bc744e9fbe1b4dd5af 100644 (file)
@@ -811,29 +811,27 @@ Memory allocation - code size : 14
 
 /(?1)()((((((\1++))\x85)+)|))/
 ------------------------------------------------------------------
-  0  50 Bra
+  0  46 Bra
   2   4 Recurse
   4   3 CBra 1
   7   3 Ket
-  9  39 CBra 2
- 12  32 CBra 3
- 15  27 CBra 4
- 18  22 CBra 5
- 21  15 CBra 6
- 24  10 CBra 7
- 27   5 Once
- 29     \g{1}+
- 32   5 Ket
- 34  10 Ket
- 36  15 Ket
- 38     \x{85}
- 40  22 KetRmax
- 42  27 Ket
- 44   2 Alt
- 46  34 Ket
- 48  39 Ket
- 50  50 Ket
- 52     End
+  9  35 CBra 2
+ 12  28 CBra 3
+ 15  23 CBra 4
+ 18  18 CBra 5
+ 21  11 CBra 6
+ 24   6 CBra 7
+ 27     \g{1}++
+ 30   6 Ket
+ 32  11 Ket
+ 34     \x{85}
+ 36  18 KetRmax
+ 38  23 Ket
+ 40   2 Alt
+ 42  30 Ket
+ 44  35 Ket
+ 46  46 Ket
+ 48     End
 ------------------------------------------------------------------
 
 # Check the absolute limit on nesting (?| etc. This varies with code unit
index f2c2d2d46b057a6aff3115f054ce4a7a3f202f54..e3f30dfa1dece5fafe8191ea2803b79b6bb048aa 100644 (file)
@@ -811,29 +811,27 @@ Memory allocation - code size : 18
 
 /(?1)()((((((\1++))\x85)+)|))/
 ------------------------------------------------------------------
-  0  69 Bra
+  0  63 Bra
   3   6 Recurse
   6   4 CBra 1
  10   4 Ket
- 13  53 CBra 2
- 17  43 CBra 3
- 21  36 CBra 4
- 25  29 CBra 5
- 29  20 CBra 6
- 33  13 CBra 7
- 37   6 Once
- 40     \g{1}+
- 43   6 Ket
- 46  13 Ket
- 49  20 Ket
- 52     \x{85}
- 54  29 KetRmax
- 57  36 Ket
- 60   3 Alt
- 63  46 Ket
- 66  53 Ket
- 69  69 Ket
- 72     End
+ 13  47 CBra 2
+ 17  37 CBra 3
+ 21  30 CBra 4
+ 25  23 CBra 5
+ 29  14 CBra 6
+ 33   7 CBra 7
+ 37     \g{1}++
+ 40   7 Ket
+ 43  14 Ket
+ 46     \x{85}
+ 48  23 KetRmax
+ 51  30 Ket
+ 54   3 Alt
+ 57  40 Ket
+ 60  47 Ket
+ 63  63 Ket
+ 66     End
 ------------------------------------------------------------------
 
 # Check the absolute limit on nesting (?| etc. This varies with code unit
index 670e55ad504aa46fa102c3307da043ee608bdc02..76486540bdb545329894810a94082d1e4fbf696f 100644 (file)
@@ -811,29 +811,27 @@ Memory allocation - code size : 28
 
 /(?1)()((((((\1++))\x85)+)|))/
 ------------------------------------------------------------------
-  0  50 Bra
+  0  46 Bra
   2   4 Recurse
   4   3 CBra 1
   7   3 Ket
-  9  39 CBra 2
- 12  32 CBra 3
- 15  27 CBra 4
- 18  22 CBra 5
- 21  15 CBra 6
- 24  10 CBra 7
- 27   5 Once
- 29     \g{1}+
- 32   5 Ket
- 34  10 Ket
- 36  15 Ket
- 38     \x{85}
- 40  22 KetRmax
- 42  27 Ket
- 44   2 Alt
- 46  34 Ket
- 48  39 Ket
- 50  50 Ket
- 52     End
+  9  35 CBra 2
+ 12  28 CBra 3
+ 15  23 CBra 4
+ 18  18 CBra 5
+ 21  11 CBra 6
+ 24   6 CBra 7
+ 27     \g{1}++
+ 30   6 Ket
+ 32  11 Ket
+ 34     \x{85}
+ 36  18 KetRmax
+ 38  23 Ket
+ 40   2 Alt
+ 42  30 Ket
+ 44  35 Ket
+ 46  46 Ket
+ 48     End
 ------------------------------------------------------------------
 
 # Check the absolute limit on nesting (?| etc. This varies with code unit
index 13b976e013375059f4a198e5732ac541336527b0..23da6cbb781153ed932c93f39614cb5dcfca6698 100644 (file)
@@ -811,29 +811,27 @@ Memory allocation - code size : 10
 
 /(?1)()((((((\1++))\x85)+)|))/
 ------------------------------------------------------------------
-  0  77 Bra
+  0  71 Bra
   3   6 Recurse
   6   5 CBra 1
  11   5 Ket
- 14  60 CBra 2
- 19  49 CBra 3
- 24  41 CBra 4
- 29  33 CBra 5
- 34  23 CBra 6
- 39  15 CBra 7
- 44   7 Once
- 47     \g{1}+
- 51   7 Ket
- 54  15 Ket
- 57  23 Ket
- 60     \x{85}
- 62  33 KetRmax
- 65  41 Ket
- 68   3 Alt
- 71  52 Ket
- 74  60 Ket
- 77  77 Ket
- 80     End
+ 14  54 CBra 2
+ 19  43 CBra 3
+ 24  35 CBra 4
+ 29  27 CBra 5
+ 34  17 CBra 6
+ 39   9 CBra 7
+ 44     \g{1}++
+ 48   9 Ket
+ 51  17 Ket
+ 54     \x{85}
+ 56  27 KetRmax
+ 59  35 Ket
+ 62   3 Alt
+ 65  46 Ket
+ 68  54 Ket
+ 71  71 Ket
+ 74     End
 ------------------------------------------------------------------
 
 # Check the absolute limit on nesting (?| etc. This varies with code unit
index 8c0abe1a22972e17f54264ac8c8fa87fe9dda1ee..0fa59f95a9eadebb81973075ad18c40db3617391 100644 (file)
@@ -811,29 +811,27 @@ Memory allocation - code size : 12
 
 /(?1)()((((((\1++))\x85)+)|))/
 ------------------------------------------------------------------
-  0  96 Bra
+  0  88 Bra
   4   8 Recurse
   8   6 CBra 1
  14   6 Ket
- 18  74 CBra 2
- 24  60 CBra 3
- 30  50 CBra 4
- 36  40 CBra 5
- 42  28 CBra 6
- 48  18 CBra 7
- 54   8 Once
- 58     \g{1}+
- 62   8 Ket
- 66  18 Ket
- 70  28 Ket
- 74     \x{85}
- 76  40 KetRmax
- 80  50 Ket
- 84   4 Alt
- 88  64 Ket
- 92  74 Ket
- 96  96 Ket
-100     End
+ 18  66 CBra 2
+ 24  52 CBra 3
+ 30  42 CBra 4
+ 36  32 CBra 5
+ 42  20 CBra 6
+ 48  10 CBra 7
+ 54     \g{1}++
+ 58  10 Ket
+ 62  20 Ket
+ 66     \x{85}
+ 68  32 KetRmax
+ 72  42 Ket
+ 76   4 Alt
+ 80  56 Ket
+ 84  66 Ket
+ 88  88 Ket
+ 92     End
 ------------------------------------------------------------------
 
 # Check the absolute limit on nesting (?| etc. This varies with code unit
index 337784596e15506b8c6986f58169db39f9ee121b..c6adb1650c5b5468a3d1a01c793afbd50db2ae01 100644 (file)
@@ -811,29 +811,27 @@ Memory allocation - code size : 14
 
 /(?1)()((((((\1++))\x85)+)|))/
 ------------------------------------------------------------------
-  0 115 Bra
+  0 105 Bra
   5  10 Recurse
  10   7 CBra 1
  17   7 Ket
- 22  88 CBra 2
- 29  71 CBra 3
- 36  59 CBra 4
- 43  47 CBra 5
- 50  33 CBra 6
- 57  21 CBra 7
- 64   9 Once
- 69     \g{1}+
- 73   9 Ket
- 78  21 Ket
- 83  33 Ket
- 88     \x{85}
- 90  47 KetRmax
- 95  59 Ket
-100   5 Alt
-105  76 Ket
-110  88 Ket
-115 115 Ket
-120     End
+ 22  78 CBra 2
+ 29  61 CBra 3
+ 36  49 CBra 4
+ 43  37 CBra 5
+ 50  23 CBra 6
+ 57  11 CBra 7
+ 64     \g{1}++
+ 68  11 Ket
+ 73  23 Ket
+ 78     \x{85}
+ 80  37 KetRmax
+ 85  49 Ket
+ 90   5 Alt
+ 95  66 Ket
+100  78 Ket
+105 105 Ket
+110     End
 ------------------------------------------------------------------
 
 # Check the absolute limit on nesting (?| etc. This varies with code unit